QThread 怎么用
时间: 2024-01-26 14:10:57 浏览: 28
QThread 是 Qt 中用于管理线程的类。通常有两种方式使用 QThread。
第一种方式是直接创建一个 QThread 的实例,并在其中重载 run() 方法来实现自己的线程功能。在 run() 方法中,你可以执行耗时或阻塞的操作,并在需要时发出信号来通知其他线程。下面是一个示例代码:
```cpp
class WorkerThread : public QThread {
Q_OBJECT
void run() override {
QString result;
/* ... 在这里执行耗时或阻塞的操作 ... */
emit resultReady(result);
}
signals:
void resultReady(const QString &s);
};
void MyObject::startWorkInAThread() {
WorkerThread *workerThread = new WorkerThread(this);
connect(workerThread, &WorkerThread::resultReady, this, &MyObject::handleResults);
connect(workerThread, &WorkerThread::finished, workerThread, &QObject::deleteLater);
workerThread->start();
}
```
第二种方式是将一个 QObject 对象移动到一个已有的 QThread 中。通过调用 moveToThread() 方法,你可以将一个 QObject 对象移动到指定的 QThread 中,这样该对象的事件循环就会在该线程中执行。下面是一个示例代码:
```cpp
QThread *thread = new QThread;
MyObject *worker = new MyObject;
worker->moveToThread(thread);
connect(thread, &QThread::started, worker, &MyObject::doWork);
connect(worker, &MyObject::finished, thread, &QThread::quit);
connect(worker, &MyObject::finished, worker, &MyObject::deleteLater);
connect(thread, &QThread::finished, thread, &QThread::deleteLater);
thread->start();
```
以上就是使用 QThread 的两种常见方式。第一种方式适用于需要在 run() 方法中执行耗时或阻塞操作的场景,而第二种方式适用于将一个 QObject 对象移动到指定线程中执行。