В Qt вы должны подключить (поставленный в очередь) сигнал, испускаемый вашим потоком, к слоту в объекте потока GUI. Затем вызов слота обрабатывается циклом обработки событий, как и спонтанные события, например, из пользовательский ввод.
Из Майя Пош отлично статья об использовании QThread:
class Worker : public QObject {
Q_OBJECT
public:
Worker();
~Worker();
public slots:
void process();
signals:
void finished();
void error(QString err);
private:
// add your variables here
};
void Worker::process() {
// allocate resources using new here
qDebug("Hello World!");
emit finished();
}
В потоке графического интерфейса:
QThread* thread = new QThread;
Worker* worker = new Worker();
worker->moveToThread(thread);
connect(worker, SIGNAL(error(QString)), this, SLOT(errorString(QString)));
connect(thread, SIGNAL(started()), worker, SLOT(process()));
connect(worker, SIGNAL(finished()), thread, SLOT(quit()));
connect(worker, SIGNAL(finished()), worker, SLOT(deleteLater()));
connect(thread, SIGNAL(finished()), thread, SLOT(deleteLater()));
thread->start();
Интересующая вас строка
connect(worker, SIGNAL(error(QString)), this, SLOT(errorString(QString)));
Теперь идите и прочитайте Как по-настоящему использовать QThreads; Полное объяснение.
person
Toby Speight
schedule
19.05.2015