QThread 在新线程中创建一个事件循环,以处理该线程中的事件。如果没有调用 QThread::exec() 方法启动事件循环,那么新线程将不会执行任何操作。确保在 QThread 对象创建后调用 exec() 方法。帮我举个例子
时间: 2024-04-12 20:30:20 浏览: 54
Qt基础开发之Qt多线程类QThread与Qt定时器类QTimer的详细方法与实例
当创建一个自定义的 QObject 子类并将其移动到 QThread 中时,需要调用 QThread::start() 方法来启动线程和事件循环。以下是一个简单的例子:
```cpp
#include <QThread>
#include <QObject>
class Worker : public QObject
{
Q_OBJECT
public:
explicit Worker(QObject *parent = nullptr) : QObject(parent) {}
public slots:
void doWork()
{
// 执行在新线程中的任务
// ...
}
};
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QThread thread;
Worker worker;
// 将 Worker 对象移动到新线程中
worker.moveToThread(&thread);
// 连接信号和槽,以在新线程中执行任务
QObject::connect(&thread, &QThread::started, &worker, &Worker::doWork);
// 启动线程和事件循环
thread.start();
return a.exec();
}
```
在上述示例中,我们创建了一个 Worker 类作为任务对象,并将其移动到 QThread 中。然后,我们使用 QObject::connect() 方法将 QThread 的 started 信号与 Worker 的 doWork 槽函数连接起来。当线程启动时,会自动执行 doWork 函数中的任务代码。
请注意,在调用 a.exec() 启动应用程序的主事件循环之前,必须调用 thread.start() 启动新线程的事件循环。这样,新线程才能正常执行任务。
阅读全文