Я пытаюсь лучше понять сигналы и слоты Qt в сочетании с потоками. Итак, я попробовал это минимальное приложение:
foo.h:
#include <QObject>
class A : public QObject {
Q_OBJECT
public:
void doit();
signals:
void x();
};
class B : public QObject {
Q_OBJECT
public slots:
void h();
};
foo.cpp:
#include "foo.h"
#include <QThread>
#include <QCoreApplication>
void B::h() {
qDebug("[%d] B::h() here!", (int) QThread::currentThreadId());
QCoreApplication::instance()->quit();
}
void A::doit() {
qDebug("[%d] emitting...", (int) QThread::currentThreadId());
emit x();
}
int main(int argc, char* argv[]) {
QCoreApplication app(argc, argv);
A a;
B b;
QObject::connect(&a, SIGNAL(x()), &b, SLOT(h()));
QThread t;
t.start();
b.moveToThread(&t);
a.doit();
t.wait();
return 0;
}
Все в порядке, только t.wait () в конце никогда не возвращается. Насколько я понимаю, вызов quit () должен остановить цикл событий, что означает, что exec () должен вернуться и, следовательно, должен быть run (), а выполнение потока должно остановиться. Я что-то упустил?