要将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多线程与主线程分离,并在主线程中处理工作线程的结果。
辰迅云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
推荐阅读: qt怎么遍历文件夹中的文件名