QThread的 - 与它的问题(初学者)
问题描述:
我尝试使用QThread的,但我不能这样做:( 我的样品线程: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(例如:计时器)。任何我可以毫无疑问地complile的好教程LEMS。 任何人都可以帮助我?
而且,如果我可以问一下,我怎么可以像onCreate()那样启动线程来创建表单?我想创建一个简单的计时器来计算应用程序运行的时间。
Regards
答
您应该仔细阅读This文章。
看看Qt 4.8 QThread文档的第一个代码示例。它有许多线路板只是为了在线程中运行一些代码。而且还有一个漏洞:QThread永远不会退出并被摧毁。
提交的补丁已被接受,但他转发给你的href链接仍显示旧代码。
This patch snippet diff在右侧显示有效的方法。
它显示了两种方法,子分类QThread
和使用QObject->Worker
您可以使用它作为您的代码基础上的示例。正如他在博客中提到的那样,应用适合您的要求的方法。
您将'workerThread :: started()'连接到'Worker :: start()',但是在您提供的代码中有'Worker :: run()',而不是'Worker :: start()'。检查connect'是否返回true或false。 – Paul 2013-04-25 19:13:42
_我找不到任何好的教程,我可以complile没有问题。任何人都可以帮助我吗?_不是/examples/threads够好吗?此外,您可能想要阅读qt-project中的[Threading Basics](http://qt-project.org/doc/qt-4.8/thread-basics.html)博文。 –
Paul
2013-04-25 19:26:07
@Paul - 'Object :: connect:在mainwindow.cpp中没有这样的插槽QThread :: run():22';在/ usr/share/qt4/doc我找不到任何东西;在qt-project.org文档我找到像我这样的代码,但它没有工作;谢谢你的链接,我会试试 – aso 2013-04-25 19:32:47