qt 线程举例

在Qt中,使用线程的一个常见方式是通过QThread类。下面是一个简单的例子,展示了如何创建一个线程并在其中执行任务。

步骤 1: 创建一个Worker类

首先,创建一个继承自QObject的Worker类,这个类将包含要在线程中执行的任务。

// worker.h  
#ifndef WORKER_H  
#define WORKER_H  
  
#include <QObject>  
  
class Worker : public QObject  
{  
    Q_OBJECT  
public:  
    explicit Worker(QObject *parent = nullptr);  
  
signals:  
    void resultReady(const QString &result);  
  
public slots:  
    void doWork(const QString &parameter);  
};  
  
#endif // WORKER_H
// worker.cpp
#include "worker.h"
Worker::Worker(QObject *parent) :
QObject(parent)
{
}
void Worker::doWork(const QString &parameter) {
QString result;
// 假设这里是耗时的计算任务
result = "Result of " + parameter;
emit resultReady(result);
}

步骤 2: 在主线程中使用Worker

在你的主窗口或主应用中,创建QThreadWorker的实例,并将Worker移动到新线程中。

#include <QCoreApplication>
#include <QThread>
#include "worker.h"
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QThread* thread = new QThread();
Worker* worker = new Worker();
worker->moveToThread(thread);
QObject::connect(worker, &Worker::resultReady, [](const QString &result){
qDebug() << result;
});
QObject::connect(thread, &QThread::started, worker, [worker](){
worker->doWork("Hello");
});
QObject::connect(worker, &Worker::finished, thread, &QThread::quit);
QObject::connect(worker, &Worker::finished, worker, &Worker::deleteLater);
QObject::connect(thread, &QThread::finished, thread, &QThread::deleteLater);
thread->start();
return a.exec();
}

在这个例子中,Worker对象的doWork方法将在新创建的线程中执行。当工作完成时,它会发出resultReady信号,你可以在主线程中连接这个信号以获取结果。

请注意,为了示例的简洁性,我省略了一些错误检查和异常处理,这在实际应用中是非常重要的。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值