class Worker : public QObject
{
Q_OBJECT
public slots:
void doWork(const QString ¶meter) {
QString result;
/* ... here is the expensive or blocking operation ... */
emit resultReady(result);
}
signals:
void resultReady(const QString &result);
};
class Controller : public QObject
{
Q_OBJECT
QThread workerThread;
public:
Controller() {
Worker *worker = new Worker;
worker->moveToThread(&workerThread);
connect(&workerThread, &QThread::finished, worker, &QObject::deleteLater);
connect(this, &Controller::operate, worker, &Worker::doWork);
connect(worker, &Worker::resultReady, this, &Controller::handleResults);
workerThread.start();
}
~Controller() {
workerThread.quit();
workerThread.wait();
}
public slots:
void handleResults(const QString &);
signals:
void operate(const QString &);
};
Qt官方文档多线程示例
最新推荐文章于 2024-08-05 15:11:19 发布
该文章展示了如何在Qt环境中创建一个Worker类,继承自QObject,用于执行耗时操作。Worker运行在单独的线程中,通过信号槽机制与Controller通信。Controller启动Worker线程,当有工作需求时发送信号,Worker接收到信号后执行doWork方法,完成后将结果通过resultReady信号发送回Controller处理。
摘要由CSDN通过智能技术生成