GUI(主)线程与子线程之间的通信(用信号槽通讯)
在主线程上,可以控制子线程启动,停止,清零
如果子线程启动的话,每一秒钟会向主线程发送一个数字,让主线程更新界面上的数字。
程序截图:

上代码:
- #include <QtGui>
- #include <QtCore>
- #include <windows.h>
- class Thread : public QThread
- {
- Q_OBJECT
- private:
- int number;
- protected:
- void run();
- public:
- Thread(QObject *parent=0);
- ~Thread();
- signals:
- void UpdateSignal(int num);
- public slots:
- void ResetSlot();
- };
- class Widget : public QWidget
- {
- Q_OBJECT
- private:
- QLabel *label;
- QPushButton *startButton;
- QPushButton *stopButton;
- QPushButton *resetButton;
- Thread *myThread;
- int number;
- public:
- Widget(QWidget *parent = 0);
- ~Widget();
- signals:
- void ResetSignal();
- public slots:
- void ClearSlot();
- void StartSlot();
- void StopSlot();
- void UpdateSlot(int num);
- };
- Thread::Thread(QObject *parent)
- {
- number = 0;
- }
- Thread::~Thread()
- {
- }
- void Thread::run()
- {
- while(1)
- {
- //开启一个死循环,让number每秒自增1,并通过发送UpdateSignal信号通知主界面更新
- emit UpdateSignal(number);
- number++;
- sleep(1);
- }
- }
- void Thread::ResetSlot()
- {
- number = 0;
- emit UpdateSignal(number);
- }
- Widget::Widget(QWidget *parent)
- {
- //设置界面布局
- startButton = new QPushButton("start");
- stopButton = new QPushButton("stop");
- resetButton = new QPushButton("reset");
- label = new QLabel("empty");
- myThread = new Thread;
- QVBoxLayout *layout = new QVBoxLayout;
- layout->addWidget(label);
- layout->addWidget(startButton);
- layout->addWidget(stopButton);
- layout->addWidget(resetButton);
- setLayout(layout);
- //连接各自信号糟
- connect(stopButton, SIGNAL(clicked()),
- this, SLOT(StopSlot()));
- connect(startButton, SIGNAL(clicked()),
- this, SLOT(StartSlot()));
- connect(resetButton, SIGNAL(clicked()),
- this, SLOT(ClearSlot()));
- connect(myThread, SIGNAL(UpdateSignal(int)),
- this, SLOT(UpdateSlot(int)));
- connect(this, SIGNAL(ResetSignal()),
- myThread, SLOT(ResetSlot()));
- setWindowTitle("Thread Test");
- resize(200, 200);
- myThread->start();
- }
- Widget::~Widget()
- {
- }
- void Widget::StartSlot()
- {
- myThread->start();
- }
- void Widget::StopSlot()
- {
- myThread->terminate();
- }
- void Widget::UpdateSlot(int num)
- {
- label->setText(QString::number(num));
- }
- void Widget::ClearSlot()
- {
- emit ResetSignal();
- }
- #include "main.moc"
- int main(int argc, char **argv)
- {
- QApplication app(argc, argv);
- Widget *widget = new Widget;
- widget->show();
- return app.exec();
- }
http://blog.csdn.net/small_qch/article/details/6681907
GUI(主)线程与子线程之间的通信(用信号槽通讯)的更多相关文章
- Android 使用handler实现线程间发送消息 (主线程 与 子线程之间)、(子线程 与 子线程之间)
keyword:Android 使用handler实现线程间发送消息 (主线程 与 子线程之间).(子线程 与 子线程之间) 相信大家平时都有使用到异步线程往主线程(UI线程)发送消息的情况. 本文主 ...
- .NET 事件总线,简化项目、类库、线程、服务等之间的通信,代码更少,质量更好。
Jaina .NET 事件总线,简化项目.类库.线程.服务等之间的通信,代码更少,质量更好. 安装 Package Manager Install-Package Jaina .NET CLI do ...
- IOS 线程处理 子线程
IOS 线程处理 子线程的启动与结束 技术交流新QQ群:414971585 IOS中,如果要在主线程中启动一个子线程,可以又两种方法: [NSThread detachNewThreadSelec ...
- C# WebService中任务处理线程创建子线程后
protected void WriteLog(string message) { lock (lockObject) { var file = System.IO.File.AppendText(& ...
- C#创建子线程,子线程使用委托更新控件
一.背景 由于在窗体程序中通过点击一个button按键后需要更新TreeView控件的内容,由于等待时间比较长,主程序无法一起在那边等待,需要去处理其它的事情,所以就需要创建新的子线程来处理.因为主线 ...
- QT GUI(主)线程与子线程之间的通信——使用跨线程的信号槽
在主线程上,可以控制子线程启动,停止,清零 如果子线程启动的话,每一秒钟会向主线程发送一个数字,让主线程更新界面上的数字. 程序截图: 上代码: #include <QtGui> #inc ...
- Java Thread.join()详解--父线程等待子线程结束后再结束
目录(?)[+] 阅读目录 一.使用方式. 二.为什么要用join()方法 三.join方法的作用 join 四.用实例来理解 打印结果: 打印结果: 五.从源码看join()方法 join是Th ...
- C# 多线程详解 Part.02(UI 线程和子线程的互动、ProgressBar 的异步调用)
我们先来看一段运行时会抛出 InvalidOperationException 异常的代码段: private void btnThreadA_Click(object sender, ...
- vue---父子组件之间的通信【props,$refs、$emit】
在用vue进行项目开发的时候,父子组件之间的通信是经常被用到的,下面就来具体说说父子组件通信的三种方式: 父组件: <template> <div> <h1>我是父 ...
随机推荐
- [置顶] Hibernate运行机理
Hibernate 的缓存体系 一级缓存: Session 有一个内置的缓存,其中存放了被当前工作单元加载的对象. 每个Session 都有自己独立的缓存,且只能被当前工作单元访问. 二级缓存: Se ...
- H5页开发规范/通用规范
兼容目标 主流移动设备:iPhone 4+ .三星.魅族.华为.红米.小米1S 以上及主流 Android 千元机型:请特别关注iPhone4/4s.魅族MX4.华为P6等机型 操作系统:iOS 7. ...
- Highcharts下载与使用_数据报表图
Highcharts简介 Highcharts:功能强大.开源.美观.图表丰富.兼容绝大多数浏览器的纯js图表库 Highcharts是一款纯javascript编写的图表库,能够很简单便捷的在Web ...
- motan源码分析二:使用spi机制进行类加载
在motan的源码中使用了很多的spi机制进行对象的创建,下面我们来具体分析一下它的实现方法. 1.在实际的jar包的\META-INF\services目录中引入相关的文件,例如下图中,我解压了co ...
- DORIS-软件网址
DORIS下载网址:http://doris.tudelft.nl/ Doris软件最新的信息总可以在这个网址上查到:http://enterprise.tudelft.nl/doris/
- Task的运行过程分析
Task的运行过程分析 Task的运行通过Worker启动时生成的Executor实例进行, caseRegisteredExecutor(sparkProperties)=> logInfo( ...
- RSA加密解密及数字签名Java实现--转
RSA公钥加密算法是1977年由罗纳德·李维斯特(Ron Rivest).阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的.当时他们三人都在麻省理工学院 ...
- MySQL-视频跟随练习笔记
在表中添加某列 alter table tbl_user add email varchar(50); 在表中删除某列 alter table tbl_user drop email; 重命名某列 a ...
- MyEclipse保存文件时 自动格式化代码! 不包括文档注释
设置不格式化 文档注释
- 10-利用com组件读取office
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.I ...