1

我尝试使用 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();

工人开始,但永远不会结束(如果我关闭应用程序,我会得到QThread: Destroyed while thread is still running。另一个问题 - 我如何在线程和我的应用程序之间传输数据?我想将 QThread 用于 QLabel(例如:计时器)。我找不到任何好的教程我可以毫无问题地编译。任何人都可以帮助我?
而且,如果我可以问,我如何为表单启动像 onCreate() 这样的线程?我想创建简单的计时器来计算应用程序运行的时间。
问候

4

1 回答 1

0

您应该通读这篇文章。

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

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

此补丁片段差异显示右侧的有效方法。

它显示了两种方法,子类化QThread和使用QObject->Worker 您可以将其用作示例来构建您的代码。正如他在博客中提到的那样,应用适合您要求的方法。

于 2013-04-26T13:04:57.740 回答