Очередь событий любого объекта QThread
фактически обрабатывается потоком, который его запустил, что довольно неинтуитивно.Распространенным решением является создание объекта-обработчика (производного от QObject
), связывание его с рабочим потоком путем вызова moveToThread
, а затем привязка сигнала флажка к слоту этого объекта.
Код выглядит примерно так:
class ObjectThatMonitorsCheckbox : public QObject
{
Q_OBJECT
// ...
public slots:
void checkboxChecked(int checked);
}
В коде, который создает поток:
QThread myWorkerThread;
ObjectThatMonitorsCheckbox myHandlerObject;
myHandlerObject.moveToThread(&myworkerThread);
connect(c->checkBox, SIGNAL(stateChanged(int)), &myHandlerObject,
SLOT(checkboxChecked(int)));
myWorkerThread.start();
Один ключевой момент: не создавать подкласс QThread
- вся фактическая работа выполняется в вашем объекте-обработчике.
Надеюсь, это поможет!
См. также: Qt: правильный способ публикации событий в QThread?