Qt工作笔记-对Qt工作线程的进一步理解
程序员文章站
2022-07-10 21:22:01
...
运行截图如下:
运行的时候:
停止的时候:
现在一般都是这么搞的
用Qt的事件驱动,用QTime去搞,具体代码如下:
widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QTimer>
#include <QThread>
#include <QListWidget>
class Worker;
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = 0);
~Widget();
public slots:
void btnClicked();
void stopBtnClicked();
private:
Ui::Widget *ui;
Worker *m_worker1;
Worker *m_worker2;
Worker *m_worker3;
QTimer m_timer;
QThread thread1;
QThread thread2;
QThread thread3;
};
#endif // WIDGET_H
worker.h
#ifndef WORKER_H
#define WORKER_H
#include <QObject>
#include <QListWidget>
#include <QColor>
class Worker:public QObject
{
Q_OBJECT
public:
Worker();
void setListWidget(QListWidget *listWidget);
void setColor(QColor color);
private slots:
void onTimeout();
private:
QListWidget *m_listWidget;
QColor m_color;
};
#endif // WORKER_H
main.cpp
#include "widget.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}
widget.cpp
#include "widget.h"
#include "ui_widget.h"
#include <QDebug>
#include <QThread>
#include <QTimer>
#include <QThread>
#include <QColor>
#include "worker.h"
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
this->setWindowTitle("CSDN IT1995");
connect(ui->pushButton,SIGNAL(clicked(bool)),this,SLOT(btnClicked()));
connect(ui->pushButton_2,SIGNAL(clicked(bool)),this,SLOT(stopBtnClicked()));
}
Widget::~Widget()
{
delete ui;
}
void Widget::btnClicked()
{
m_worker1=new Worker;
m_worker1->setListWidget(ui->listWidget);
m_worker1->setColor(Qt::blue);
m_worker2=new Worker;
m_worker2->setListWidget(ui->listWidget);
m_worker2->setColor(Qt::red);
m_worker3=new Worker;
m_worker3->setListWidget(ui->listWidget);
m_worker3->setColor(Qt::green);
connect(&m_timer,SIGNAL(timeout()),m_worker1,SLOT(onTimeout()));
connect(&m_timer,SIGNAL(timeout()),m_worker2,SLOT(onTimeout()));
connect(&m_timer,SIGNAL(timeout()),m_worker3,SLOT(onTimeout()));
m_timer.start(1000);
m_worker1->moveToThread(&thread1);
m_worker2->moveToThread(&thread2);
m_worker3->moveToThread(&thread3);
thread1.start();
thread2.start();
thread3.start();
}
void Widget::stopBtnClicked()
{
m_timer.stop();
thread1.exit();
thread2.exit();
thread3.exit();
delete m_worker1;
delete m_worker2;
delete m_worker3;
}
worker.cpp
#include "worker.h"
#include <QDebug>
#include <QThread>
Worker::Worker()
{
}
void Worker::setListWidget(QListWidget *listWidget)
{
m_listWidget=listWidget;
}
void Worker::setColor(QColor color)
{
m_color=color;
}
void Worker::onTimeout()
{
qDebug()<<"当前的线程ID为:"<<QThread::currentThreadId();
QListWidgetItem *listItem=new QListWidgetItem("当前的线程ID地址为(int型):"+QString::number((int)QThread::currentThreadId()));
listItem->setTextColor(m_color);
m_listWidget->insertItem(0,listItem);
}
推荐阅读
-
C++工作笔记-对二级指针的进一步理解(获取调用者的地址)
-
Qt工作笔记-对QImage的进一步认识(关于α通道)
-
Qt工作笔记-对QXmlStreamReader的进一步认识(读取XML)
-
Qt工作笔记-对QObject::connect函数进一步认识(重载)
-
C++工作笔记-对结构体的进一步认识
-
Qt工作笔记-qmake和uic(对Qt底层的进一步认识)
-
Qt|C++工作笔记-对虚函数的进一步认识(关键是Qt中如何正确使用,达到想要的效果)
-
Qt工作笔记-对QXmlStreamWriter进一步的认识(写复杂的XML文件)
-
C++工作笔记-对友元函数的进一步理解
-
C语言工作笔记-对函数指针的进一步认识(与回调函数结合使用,并且对比C++的回调)