Сигналы и слоты Qt ломаются при преобразовании проекта Visual C++ для ускорения сборки файла makefile
Я создал проект Visual C++ с использованием MSVS, и я только что сделал другой проект в MSVS, чтобы тот же код мог быть собран с помощью Boost build. В настоящее время я могу собрать свой проект, используя проект Visual C++, а также проект Makefile, который использует boost build. Между этими двумя сборками есть разница, касающаяся сигналов 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).
Если у кого-то есть опыт, которым он может поделиться, он будет очень признателен.
1 ответ
Похоже, проблема заключалась в структуре упаковки. Я пишу код для пары кодовых баз, которые объединяются, и по совпадению случаются конфликты пакетов. Чтобы исправить упаковку для сборки с boost-build, все, что мне нужно было добавить это к библиотеке, сгенерированной в Jamfile:
lib foo
:
...
:
...
<target-os>linux:<cxxflags>-fpack-struct=1
<target-os>windows:<cxxflags>-Zp1
;
Это сработало для меня, так что, надеюсь, это поможет кому-то еще, если они застрянут здесь