qt工作线程如何使用,实例代码
时间: 2024-09-26 14:18:17 浏览: 5
在Qt中,可以使用QThread工作线程来执行耗时的操作,避免阻塞主线程并提高UI的响应速度。下面是一个简单的例子,展示了如何创建、启动和通信工作线程:
```cpp
#include <QObject>
#include <QThread>
#include <QDebug>
// 定义线程任务
class Worker : public QObject {
public:
explicit Worker(QObject *parent = nullptr)
: QObject(parent) {}
void run() {
qInfo("Worker thread started");
// 这里放置耗时操作,例如网络请求或文件读取
int heavyTaskResult = performHeavyTask();
emit resultReady(heavyTaskResult);
}
private slots:
void processResult(int result) {
qInfo("Received result from worker: %d", result);
emit taskFinished();
}
signals:
void resultReady(int result); // 信号,当任务完成时发出结果
void taskFinished(); // 信号,表示任务已完成
private:
int performHeavyTask() { return 42; } // 模拟一个耗时操作
};
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
// 创建工作线程
Worker worker;
QThread *thread = new QThread;
worker.moveToThread(thread);
// 连接信号和槽
connect(&worker, &Worker::resultReady, &worker, &Worker::processResult);
connect(&worker, &Worker::taskFinished, thread, &QThread::quit);
connect(thread, &QThread::started, &worker, &QObject::start);
// 启动线程
thread->start();
// 在主线程中发起工作
worker.run();
// 等待线程结束
thread->wait();
return app.exec();
}
```
在这个例子中,我们首先创建了一个`Worker`类,并继承自`QObject`。然后在`run()`方法中模拟了耗时任务,实际应用中可能是网络请求或计算密集型操作。我们还定义了两个信号`resultReady`和`taskFinished`,用于在工作完成后通知主线程。
在`main`函数中,我们创建了一个`QThread`和一个`Worker`实例,并将它们关联起来。通过`connect()`函数,我们连接了线程的开始信号到`run()`方法,以及`Worker`的信号到相应的槽函数。最后,启动线程并在主线程等待直到任务完成。