要將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多線程與主線程分離,并在主線程中處理工作線程的結果。