线程-问题与它(初学者)

QThread - problems with it (beginner)

本文关键字:初学者 问题 线程      更新时间:2023-10-16

我尝试使用QThread,但我不能这样做:(我的示例线程:

#include "worker.h"
#include "mainwindow.h"
#include <QDebug>
Worker::Worker() {}
Worker::~Worker() {
    qDebug() << "Worker ends.";
}
void Worker::run() {
    qDebug() << "Worker start.";
    sleep(2);
    emit finished();
}
代码on_btnStart_clicked():
Worker *worker = new Worker;
QThread *workerThread = new QThread(this);
connect(workerThread, SIGNAL(started()), worker, SLOT(start()));
connect(workerThread, SIGNAL(finished()), worker, SLOT(quit()));
worker->moveToThread(workerThread);
workerThread->start();

Worker启动,但从未结束(如果我关闭应用程序,我得到QThread: Destroyed while thread is still running。)另一个问题-我如何在线程和应用程序之间传输数据?我想使用QThread为QLabel(示例:计时器)。我找不到任何好的教程,我可以编译没有问题。有人能帮我吗?
而且,如果我可以问,我如何启动线程像onCreate()的形式?我想创建一个简单的计时器来计算应用程序运行的时间。
关于

你应该通读一下这篇文章。

查看Qt 4.8 QThread文档的第一个代码示例。它有许多行代码,只是为了在线程中运行一些代码。甚至还有一个漏洞:QThread永远不会退出并被销毁。

提交的补丁已被接受,但他转发给您的href链接仍然显示旧代码。

这个补丁片段diff在右侧显示了有效的方法。

给出了对QThread进行子类化和使用QObject->Worker的两种方法您可以使用它作为基础代码的示例。正如他在博客中提到的那样,应用适合您需求的方法。