需求: 点击QPushButton按钮,QLabel中的数字,不断累加,一直到999。 做法: 点击QPushButton后,启动线程,线程while循环,不断发送累加的数字会主线程,修改QLabel中的数字 其他: 一个任务类,可以创建多个任务,写法麻烦一点,视情况决定是否采用这种方法。 主要代码:
// MyThread.h #pragma once #include <QObject> #include <QThread> class MyWork : public QObject { Q_OBJECT public: MyWork(QObject *parent=nullptr); ~MyWork(); void work(); signals: void sendNum(int num); };
// MyThread.cpp #include "MyThread.h" MyWork::MyWork(QObject *parent) : QObject(parent) {} MyWork::~MyWork() {} void MyWork::work() { int num = 0; while (num < 1000) { emit sendNum(num); num++; QThread::msleep(5); } }
// QtWidgetsApplication1.cpp #include "MyThread.h" MyWidget::MyWidget(QWidget *parent) : QDialog(parent) { ui.setupUi(this); // 1.创建子线程对象 QThread* t = new QThread; // 2.创建任务类对象 MyWork* work = new MyWork; // 3.将任务类对象移动到子线程对象中 work->moveToThread(t); // 开始工作 connect(this, &MyWidget::startWork, work, &MyWork::work); connect(work, &MyWork::sendNum, this, [=](int num) {ui.label->setText(QString::number(num)); }); connect(ui.pushButton, &QPushButton::clicked, this, [=]() { emit startWork(); t->start(); }); // 释放 // 第一种:创建的时候,添加this参数,这样会自动析构,例:QThread* t = new QThread(this); // 第二种,手动释放 connect(this, &MyWidget::destroy, [=]() { t->quit(); t->wait(); delete t; delete work; }); }
标签:num,Qt,work,QObject,MyWork,线程,QThread From: https://www.cnblogs.com/shiyixirui/p/17442054.html