c++ - QThread - 问题(初学者)

标签 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();

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

最佳答案

你应该通读This文章。

Look at the first code sample of the Qt 4.8 QThread documentation. It has many lines of boiler plate just to run some code in a thread. And the there is even a leak: the QThread is never going to quit and be destroyed.

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

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

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

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

相关文章:

c++ - 数组初始化宏

c++ - 如何在 Eclipse CDT 中设置相应的 GCcflags和环境变量

c++ - Microsoft Visual Studio 中的 QWT 直方图和立即关闭的 Qt 插件

c++ - ComboBox with Checkboxes inside, C++ Qt, 选择/取消选择所有复选框

c++ - QSqlDatabase/QSqlQuery 终止正在运行的查询?

c++ - notify_all 不唤醒等待线程

c++ - 在我的网站上运行python,C,C++应用程序

c++ - 如何以最快的方式检查给定的数字是否可以被 15 整除?

c++ - 调整 Qt UI 元素的大小

ios - 使用 Qt 的免费配置文件