• QT使用QThread创建线程的方法


     

    QT使用QThread启动线程的方法 

     创建项目文件基类选择QDialog,添加两个按钮

    分别按钮右键-》转到槽,添加代码

    点击启动线程,

    thread2.start();默认调用my_thread类的run函数
    
    1. #include "dialog.h"
    2. #include "ui_dialog.h"
    3. #include
    4. Dialog::Dialog(QWidget *parent)
    5. : QDialog(parent)
    6. , ui(new Ui::Dialog)
    7. {
    8. ui->setupUi(this);
    9. }
    10. Dialog::~Dialog()
    11. {
    12. delete ui;
    13. }
    14. void Dialog::on_pushButton_start_clicked()
    15. {
    16. thread2.start();
    17. ui->pushButton_start->setEnabled(false);
    18. ui->pushButton_stop->setEnabled(true);
    19. }
    20. void Dialog::on_pushButton_stop_clicked()
    21. {
    22. if(thread2.isRunning())
    23. {
    24. thread2.stop();
    25. ui->pushButton_start->setEnabled(true);
    26. ui->pushButton_stop->setEnabled(false);
    27. }
    28. else
    29. {
    30. qDebug()<<tr("线程已经停止");
    31. }
    32. }

    dialog.h

    1. #ifndef DIALOG_H
    2. #define DIALOG_H
    3. #include
    4. #include "my_thread.h"
    5. QT_BEGIN_NAMESPACE
    6. namespace Ui { class Dialog; }
    7. QT_END_NAMESPACE
    8. class Dialog : public QDialog
    9. {
    10. Q_OBJECT
    11. public:
    12. Dialog(QWidget *parent = nullptr);
    13. ~Dialog();
    14. private slots:
    15. void on_pushButton_start_clicked();
    16. void on_pushButton_stop_clicked();
    17. private:
    18. Ui::Dialog *ui;
    19. my_thread thread2;
    20. };
    21. #endif // DIALOG_H

     

    #include 

    创建my_thread的类

    头文件:

    1. #ifndef MY_THREAD_H
    2. #define MY_THREAD_H
    3. #include
    4. class my_thread : public QThread
    5. {
    6. Q_OBJECT
    7. public:
    8. explicit my_thread(QObject *parent = 0);
    9. void stop();
    10. protected:
    11. void run();
    12. private:
    13. volatile bool stopped;//volatile可以使stopped变量任何时候都保持最新的值
    14. };
    15. #endif // MY_THREAD_H

    cpp文件

     

    1. #include "my_thread.h"
    2. #include
    3. my_thread::my_thread(QObject * parent):QThread(parent)
    4. {
    5. stopped=false;
    6. }
    7. void my_thread::run()
    8. {
    9. qreal i=0;// QT的浮点型
    10. while(!stopped)
    11. {
    12. qDebug()<<QString("in my_thread:%1").arg(i);
    13. msleep(1000);
    14. i++;
    15. }
    16. stopped = false;
    17. qDebug()<<tr("线程已经停止啦");
    18. }
    19. void my_thread::stop()
    20. {
    21. stopped=true;
    22. }

  • 相关阅读:
    java8-17 --- Stream流
    计算机毕业设计ssm健身房管理系统y7i9n系统+程序+源码+lw+远程部署
    【译】.NET 7 中的性能改进(五)
    如何使用 Docker 部署 GitLab
    Python采集外网美女照片,又是养眼的一天
    【车载开发系列】UDS诊断---读取内存($0x23)
    分布式系统大势所趋,银行运维如何与时俱进?
    数据大屏定时请求后端数据
    Streaming Systems
    CrossFTP
  • 原文地址:https://blog.csdn.net/txwtech/article/details/126376107