Сигналы и слоты 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
;

Это сработало для меня, так что, надеюсь, это поможет кому-то еще, если они застрянут здесь

Другие вопросы по тегам