Qt5.9 继承 QObject 创建多线程实例的攻略完整步骤如下:
步骤一:继承 QObject 创建对象
首先,我们需要继承 QObject
类,并将实例化的对象移动到新的线程中。可以使用 moveToThread()
函数来完成此操作。示例如下:
class Worker : public QObject
{
Q_OBJECT
public:
Worker()
{
// ...
}
public slots:
void doWork()
{
// ...
}
};
在上述示例中,Worker
类继承了 QObject
并公开了一个槽,用于在后台线程中进行工作。
步骤二:创建 QThread 对象
接下来,我们需要创建一个新的 QThread
对象,并将我们的 Worker
对象移到该线程中。这个新的线程对象会负责调用 Worker
对象的槽函数。示例如下:
QThread* thread = new QThread;
Worker* worker = new Worker;
worker->moveToThread(thread);
在上述示例中,我们创建了一个新的 QThread
对象,然后实例化了我们的 Worker
类并将其移动到了新线程中。
步骤三:开始线程
现在,我们需要开始运行线程。可以通过调用 start()
函数来完成此操作。示例如下:
thread->start();
步骤四:连接信号和槽
最后我们需要通过信号和槽机制来启动 Worker
类中的 doWork()
方法。 信号和槽是在 QObject 层面上实现的,因此我们需要使用 QMetaObject::invokeMethod()
函数来调用该方法。示例如下:
connect(thread, &QThread::started, worker, &Worker::doWork);
在上述示例中,我们已将 Worker
类中的 doWork()
方法与线程的 started
信号连接起来。这将在新线程中调用 doWork()
方法。
示例一:开启线程并运行
在此示例中,我们将实例化 QThread
和 Worker
对象,并将 Worker
对象移到新的线程中。我们还将信号和槽连接在一起,以便 Worker
中的槽方法在新线程中运行。
QThread* thread = new QThread;
Worker* worker = new Worker;
worker->moveToThread(thread);
connect(thread, &QThread::started, worker, &Worker::doWork);
thread->start();
示例二:线程结束后删除它
该示例演示了如何在线程完成任务后删除线程实例。
QThread* thread = new QThread;
Worker* worker = new Worker;
worker->moveToThread(thread);
connect(thread, &QThread::started, worker, &Worker::doWork);
connect(worker, &Worker::workFinished, thread, &QThread::quit);
connect(worker, &Worker::workFinished, worker, &Worker::deleteLater);
connect(thread, &QThread::finished, thread, &QThread::deleteLater);
thread->start();
在此示例中,我们添加了一个信号 workFinished
到 Worker
类中,以向我们的线程发出工作完成信号。线程将在 workFinished
信号后退出,并确保在工作完成后删除 Worker
和 QThread
实例。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Qt5.9继承QObject创建多线程实例 - Python技术站