阅读量:0
要将Qt多线程与主线程分离,可以使用Qt中的信号和槽机制。
以下是一个简单的示例,演示如何在主线程中创建一个工作线程,并在工作线程中执行任务,然后将结果发送回主线程:
#include <QCoreApplication> #include <QThread> #include <QDebug> // 自定义工作线程类 class WorkerThread : public QThread { Q_OBJECT public: void run() override { // 在工作线程中执行任务 QString result = doWork(); // 发送信号,将结果传递给主线程 emit workFinished(result); } signals: void workFinished(const QString& result); private: QString doWork() { // 模拟耗时任务 QThread::sleep(2); return "Task finished"; } }; int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); // 创建工作线程 WorkerThread workerThread; // 在主线程中处理工作线程的结果 QObject::connect(&workerThread, &WorkerThread::workFinished, [](const QString& result){ qDebug() << "Result received in main thread:" << result; qApp->quit(); }); // 启动工作线程 workerThread.start(); return a.exec(); } #include "main.moc"
在上面的示例中,创建了一个名为WorkerThread
的自定义工作线程类,继承自QThread
。在run()
函数中执行了任务,并在任务完成后发送了一个带有结果的信号workFinished
。
在main()
函数中创建了一个工作线程对象,并连接了一个匿名函数到workFinished
信号。当工作线程执行完任务并发送信号时,匿名函数将在主线程中被调用,并输出结果。
通过这种方式,可以将Qt多线程与主线程分离,并在主线程中处理工作线程的结果。