QT小例子GUI(主)线程与子线程之间的通信

在主线程上,可以控制子线程启动,停止,清零

如果子线程启动的话,每一秒钟会向主线程发送一个数字,让主线程更新界面上的数字。

  1. #ifndef TQT_H_
  2. #define TQT_H_
  3. #include <QtGui>
  4. #include <QtCore>
  5. class Thread : public QThread
  6. {
  7. Q_OBJECT
  8. private:
  9. int number;
  10. protected:
  11. void run();
  12. public:
  13. Thread(QObject *parent=0);
  14. ~Thread();
  15. signals:
  16. void UpdateSignal(int num);
  17. public slots:
  18. void ResetSlot();
  19. };
  20. class Widget : public QWidget
  21. {
  22. Q_OBJECT
  23. private:
  24. QLabel *label;
  25. QPushButton *startButton;
  26. QPushButton *stopButton;
  27. QPushButton *resetButton;
  28. Thread *myThread;
  29. int number;
  30. public:
  31. Widget(QWidget *parent = 0);
  32. ~Widget();
  33. signals:
  34. void ResetSignal();
  35. public slots:
  36. void ClearSlot();
  37. void StartSlot();
  38. void StopSlot();
  39. void UpdateSlot(int num);
  40. };
  41. #endif
  42. //tqt.cpp
  43. #include "tqt.h"
  44. #include <assert.h>
  45. #include <windows.h>
  46. Thread::Thread(QObject *parent)
  47. {
  48. number = 0;
  49. }
  50. Thread::~Thread()
  51. {
  52. }
  53. void Thread::run()
  54. {
  55. while(1)
  56. {
  57. emit UpdateSignal(number);
  58. number++;
  59. sleep(1);
  60. }
  61. }
  62. void Thread::ResetSlot()
  63. {
  64. number = 0;
  65. emit UpdateSignal(number);
  66. }
  67. Widget::Widget(QWidget *parent)
  68. {
  69. startButton = new QPushButton("start");
  70. stopButton = new QPushButton("stop");
  71. resetButton = new QPushButton("reset");
  72. label = new QLabel("empty");
  73. myThread = new Thread;
  74. QVBoxLayout *layout = new QVBoxLayout;
  75. layout->addWidget(label);
  76. layout->addWidget(startButton);
  77. layout->addWidget(stopButton);
  78. layout->addWidget(resetButton);
  79. setLayout(layout);
  80. connect(stopButton, SIGNAL(clicked()),
  81. this, SLOT(StopSlot()));
  82. connect(startButton, SIGNAL(clicked()),
  83. this, SLOT(StartSlot()));
  84. connect(resetButton, SIGNAL(clicked()),
  85. this, SLOT(ClearSlot()));
  86. connect(myThread, SIGNAL(UpdateSignal(int)),
  87. this, SLOT(UpdateSlot(int)));
  88. connect(this, SIGNAL(ResetSignal()),
  89. myThread, SLOT(ResetSlot()));
  90. setWindowTitle("Thread Test");
  91. resize(200, 200);
  92. myThread->start();
  93. }
  94. Widget::~Widget()
  95. {
  96. }
  97. void Widget::StartSlot()
  98. {
  99. myThread->start();
  100. }
  101. void Widget::StopSlot()
  102. {
  103. myThread->terminate();
  104. }
  105. void Widget::UpdateSlot(int num)
  106. {
  107. label->setText(QString::number(num));
  108. }
  109. void Widget::ClearSlot()
  110. {
  111. emit ResetSignal();
  112. }
  113. //main.cpp
  114. #include <QtGui>
  115. #include "tqt.h"
  116. int main(int argc,char **argv)
  117. {
  118. QApplication app(argc, argv);
  119. Widget *widget = new Widget;
  120. widget->show();
  121. return app.exec();
  122. }

QT小例子GUI(主)线程与子线程之间的通信相关推荐

  1. 关于主窗体与子窗体之间的通信以及面向对象思想的一些应用

    该写几篇文章啦~ 最近在搞winForm,开始的时候遇到点问题.其实也不算什么大问题,归结起来还是主窗体与子窗体之间传值.通信的问题: 这个问题在网上的解决方案有很多,一搜一大堆,比如将主窗体自身作为 ...

  2. Qt对话框的事件循环分析(子线程中不能创建UI窗体分析)

    重要: GUI线程和辅助线程 如前所述,每个程序在启动时都有一个线程.这个线程被称为"主线程"(在Qt应用程序中也称为"GUI线程").Qt GUI必须在这个线 ...

  3. Qt对话框的事件循环分析(子线程中不能创建UI窗体分析2)

    Qt事件机制 QT-UI 后端 重要: GUI线程和辅助线程 如前所述,每个程序在启动时都有一个线程.这个线程被称为"主线程"(在Qt应用程序中也称为"GUI线程&quo ...

  4. PySide2多线程问题示例:创建新线程、子线程发射信号到主界面

    PySide2多线程问题示例:创建新线程.子线程发射信号到主界面 本文是在pyside学习过程中的记录,从无子线程.子线程在主程序中直接操作Qt界面.子线程发射信号操作主界面三个步骤出发,记录对多线程 ...

  5. python主线程和子线程_python 在threading中如何处理主进程和子线程的关系

    之前用python的多线程,总是处理不好进程和线程之间的关系.后来发现了join和setDaemon函数,才终于弄明白.下面总结一下. 1.使用join函数后,主进程会在调用join的地方等待子线程结 ...

  6. Qt中UI线程与子线程的交互

    0.前言 GUI框架一般只允许UI线程操作界面组件,Qt也是如此.但我们的应用程序一般是多线程的,势必就涉及到UI线程与子线程的交互. 下面介绍常用的UI线程与子线程交互方式,并附上自己的Demo. ...

  7. Qt小例子学习52 - 卡片游戏

    Qt小例子学习52 - 卡片游戏 Card.qml import QtQuick 2.0 import QtQuick.Layouts 1.3Item {id: cardLayout.fillWidt ...

  8. Qt 小例子学习33 - QTableWidget 显示点击的行列

    Qt 小例子学习33 - QTableWidget 显示点击的行列 #include <QApplication> #include <QDebug> #include < ...

  9. Qt 小例子学习26 - 画网格

    Qt 小例子学习26 - 画网格 GraphicsScene.h #ifndef GRAPHICSSCENE_H #define GRAPHICSSCENE_H#include <QGraphi ...

最新文章

  1. 用Python不回头也能看美女,这招你会了吗?
  2. 微软MCITP系列课程(二七)管理域和林信任
  3. .net简单算法实现无限级分类(一)
  4. 0401互联网新闻 | 企业微信新版发布;阿里巴巴发布“AI谣言粉碎机”
  5. nginx 高并发配置参数(转载)
  6. 探索cqrs和事件源_实践中的事件源和CQRS
  7. linux 双mipi摄像头,VS-RK3399 在linux系统下面调试Mipi camera接口介绍
  8. Solve one floodlight install problem
  9. [03] Android系统亮度调节
  10. Android SqlLite数据库的创建、增、删、改、查、使用事务
  11. python3 模块详细解释_详解Python3中的contextvars模块
  12. 在线打字练习网站介绍
  13. vue项目中引用阿里云图标库
  14. 2020年重磅喜讯!热烈祝贺王家林大咖大数据经典传奇著作《Spark大数据商业实战三部曲》 畅销书籍第二版 清华大学出版社发行上市! 前浪致 Spark + AI 后浪
  15. ArcGIS中地理配准与空间校正的不同
  16. hive为什么总是 执行Job running in-process (local Hadoop),总是本地执行。
  17. 山西省忻州市水泥厂能耗监测系统的设计与应用
  18. xp升级到win7傻瓜教程_重装系统软件哪些比较好_windows7教程
  19. matlab的空间坐标轴,空间三维坐标轴旋转
  20. 废旧android手机变短信服务器

热门文章

  1. php实现用户注册代码,php实现用户注册的代码示例
  2. 山西大学计算机科学与技术全国排名,山西这所大学曾是国内排名前五,如今排名下滑,有点走下坡路了...
  3. eclipse导入jar包_在命令行上操作JAR,WAR和EAR
  4. 继国美处罚“摸鱼”员工后,网易出品之摸鱼计算器...
  5. SpringBoot集成WebSocket,实现后台向前端推送信息
  6. 北京44岁程序员失业,感叹:编程估计没戏了,想去卖煎饼果子
  7. 每日一皮:测试都ok啊,咋一上线就乱了呢...
  8. 这个神器竟然能分分钟将多个 kubeconfig 合并成一个!
  9. 面试:说说Java中的 volatile 关键词?
  10. 99%的人都能看懂的分布式最佳「补偿」实践