Сигналы и слоты Qt ломаются при преобразовании проекта Visual C++ для ускорения проекта makefile сборки

Я создал проект 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).

Если у кого-то есть опыт, он может поделиться им будет очень признателен.


person TopGunCoder    schedule 14.07.2014    source источник
comment
Как у вас работает moc с boost build?   -  person drescherjm    schedule 15.07.2014
comment
@drescherjm Я еще не очень хорошо знаком с сборкой boost, но похоже, что Jamfile использует это: [ cast _ moccable-cpp : [ glob *.cpp ] ]. Я не уверен, поможет ли это, но я только что узнал, что если я создам проект msvs и запущу свой проект повышения, то сигналы и слоты будут работать. Это заставляет меня думать, что есть что-то, накладывающееся на насмешки, но я не уверен, как с этим справиться.   -  person TopGunCoder    schedule 15.07.2014
comment
Сотрите это, он перезапишет файл, который я создаю, поэтому, конечно, он будет работать: p   -  person TopGunCoder    schedule 15.07.2014


Ответы (1)


Похоже, проблема была на самом деле в упаковке структуры. Я пишу код для нескольких баз кода, которые объединяются, и по совпадению случаются некоторые конфликты упаковки. Чтобы исправить упаковку для сборки с помощью boost-build, все, что мне нужно было, это добавить это в библиотеку, сгенерированную в Jamfile:

    lib foo
:
    ...
:
    ...
    <target-os>linux:<cxxflags>-fpack-struct=1
    <target-os>windows:<cxxflags>-Zp1
;

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

person TopGunCoder    schedule 28.07.2014