class Thr : public QObject
{
Q_OBJECT
public:
Thr() {
QThread* comThread = new QThread();
this->moveToThread(comThread);
connect(comThread, SIGNAL(started()), this, SLOT(run()));
connect(this, SIGNAL(finished()), comThread, SLOT(terminate()));
comThread->start();
}
public slots:
void run() {
// таймер
QTimer* tim = new QTimer();
connect(tim, SIGNAL(timeout()), this, SLOT(timerTimeout()));
tim->start(2000);
qDebug() << "run"; // это вызывается
while(thread()->isRunning()) thread()->sleep(1); // торчим здесь
emit finished();
}
void timerTimeout() {
qDebug() << "timerTimeout"; // это не вызывается
}
signals:
void finished();
};
Код простейший. Создаю в главном файле через Thr* comThread = new Thr();.
Как видно с комментариев, не вызывается обработчик сигнала таймера. Возможно, слот с компонент, вызывающий сигнал находятся в разных потоках, из-за чего не работают.
PS: возможно натупил, спать хочу)))