我尝试使用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/