Qt工作笔记-对Qt工作线程的进一步理解
生活随笔
收集整理的這篇文章主要介紹了
Qt工作笔记-对Qt工作线程的进一步理解
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
運行截圖如下:
運行的時候:
停止的時候:
現在一般都是這么搞的
用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_OBJECTpublic: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_Hworker.h
#ifndef WORKER_H #define WORKER_H#include <QObject> #include <QListWidget> #include <QColor>class Worker:public QObject {Q_OBJECTpublic:Worker();void setListWidget(QListWidget *listWidget);void setColor(QColor color);private slots:void onTimeout();private:QListWidget *m_listWidget;QColor m_color; };#endif // WORKER_Hmain.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); }總結
以上是生活随笔為你收集整理的Qt工作笔记-对Qt工作线程的进一步理解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux学习笔记-Linux下读写文件
- 下一篇: 使用CMake与VS2012编译Open