Qt 第二种线程
流程:
?
工程目錄:
mythread.h:
#ifndef MYTHREAD_H #define MYTHREAD_H#include <QObject>class MyThread : public QObject {Q_OBJECT //要使用信號和槽必須有的宏, public:explicit MyThread(QObject *parent = 0);//線程處理函數void myTimerout();//由于bool isStop是私有的,需要定義一個公有接口,這里使用的是默認參數void setFlag(bool flag = true);signals:void mySignal();public slots:private:bool isStop;};#endif // MYTHREAD_H?
?
mywidget.h:
#ifndef MYWIDGET_H #define MYWIDGET_H#include <QWidget>#include "mythread.h"#include <QThread>//添加在這里作為全局namespace Ui { class MyWidget; }class MyWidget : public QWidget {Q_OBJECTpublic:explicit MyWidget(QWidget *parent = 0);~MyWidget();void dealSignal();void dealclose();//點擊叉號槽函數 signals:void startThread();//啟動子線程的信號private slots:void on_buttonStart_clicked();void on_buttonStop_clicked();private:Ui::MyWidget *ui;MyThread *myT;QThread *thread;};#endif // MYWIDGET_H?
?
mythread.cpp:
#include "mythread.h"#include <QThread>//待會用到sleep函數 #include <QDebug>MyThread::MyThread(QObject *parent) : QObject(parent) {isStop = false;}void MyThread::myTimerout() { // while(1) // { // //每隔一秒發(fā)射一次mySignal(), // QThread::sleep(1);// emit mySignal();// qDebug()<<"子線程號: "<<QThread::currentThread(); // }//換成如下代碼while(isStop == false){//每隔一秒發(fā)射一次mySignal(),QThread::sleep(1);emit mySignal();qDebug()<<"子線程號: "<<QThread::currentThread();if (true == isStop){break;}} }void MyThread::setFlag(bool flag) {isStop = flag; }?
?
mywidget.cpp:
?
ui:
?
轉載于:https://www.cnblogs.com/doker/p/11162523.html
總結
- 上一篇: python:第一个简单爬虫程序
- 下一篇: 密码与安全新技术总结