我尝试使用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()之类的线程?我想创建一个简单的计时器来计算应用程序运行的时间。
问候

最佳答案

您应该已通读This文章。


  查看Qt 4.8 QThread文档的第一个代码示例。它具有许多样板行,仅用于在线程中运行一些代码。而且甚至存在泄漏:QThread永远不会退出并被销毁。


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

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

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

关于c++ - QThread-问题(入门),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16222776/

10-12 21:52