Я создал проект Visual C++ с помощью MSVS, и я только что сделал еще один проект в MSVS, чтобы тот же код можно было собрать с помощью ускоренной сборки. В настоящее время я могу построить свой проект, используя проект Visual C++, а также проект Makefile, который использует ускоренную сборку. Однако между двумя сборками есть разница в отношении сигналов QT и слотов. Для следующего кода, когда я вызываю MyThread::Start()
, слот onTimeout()
вызывается, когда проект создается в Visual Studio, но не вызывается при сборке с использованием Boost build.
class MyThread: public QObject{
Q_OBJECT
public:
bool start();
public Q_SLOTS:
void onTimeout();
private:
QThread m_thread;
QTimer m_timer;
};
void MyThread::start()
{
m_timer.start(1000);
m_thread.setObjectName(QString("GigeControl"));
m_thread.start();
m_timer.moveToThread(&m_thread);
}
void MyThread::onTimeout()
{
//Do Stuff
}
Мне действительно трудно понять различия между двумя сборками, тем более что мне нужны эти сигналы и слоты для работы. Одно важное отличие, которое я заметил до сих пор, заключается в том, что проект Visual C++ построен с использованием /Zp1
, поэтому все структуры выровнены по 1 байту. Это не делается в проекте повышения, так как я не знаю, как это сделать. Я видел людей в Интернете, упоминающих, что выравнивание структуры (особенно использование #pragma pack
может вызвать проблемы с QT).
Если у кого-то есть опыт, он может поделиться им будет очень признателен.
[ cast _ moccable-cpp : [ glob *.cpp ] ]
. Я не уверен, поможет ли это, но я только что узнал, что если я создам проект msvs и запущу свой проект повышения, то сигналы и слоты будут работать. Это заставляет меня думать, что есть что-то, накладывающееся на насмешки, но я не уверен, как с этим справиться. - person TopGunCoder   schedule 15.07.2014