QThread - 它的问题(初学者)

时间:2013-04-25 19:06:23

标签: c++ qt

我尝试使用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()那样启动线程?我想创建一个简单的计时器来计算应用程序运行的时间 此致

1 个答案:

答案 0 :(得分:0)

您应该阅读This文章。

  

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

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

This patch snippet diff在右侧显示有效方法。

它显示了两种方法,子类QThread和使用QObject->Worker 您可以将其用作示例的代码。在博客中提到适用您的要求的方法。