线程间通信:
1.自定义事件:postEvent();
2.信号与槽【本质也是通过自定义事件实现的】

注意:每个线程都有自己的事件循环

下面先说明下信号与槽的通信:

下面这个程序的运行截图

模拟下载!

此程序的逻辑:

主线程有一个QProgressBar。

有一个子线程,把主线程里面的QProgressBar传入子线程。

子线程里面在run里面有个new一个Worker类,通过信号与槽进行通信。

这里要注意:

exec(),可以让子线程进入事件循环

源代码如下:

widget.h

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <QThread>
#include <QProgressBar>
#include <QTimer>class Worker:public QObject{Q_OBJECT
public:Worker(QObject *parent=0);~Worker();
signals:void progressChanged(int progress);protected slots:void onTimeout();public:QTimer m_timer;int m_progress;
};class DownloadThread:public QThread{
public:DownloadThread(QObject *receiver,QObject *parent=0);~DownloadThread();void run();protected:QObject *m_receiver;
};class Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = 0);~Widget();protected:QProgressBar *m_progress;
};#endif // WIDGET_H

main.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 <QDebug>
#include <QVBoxLayout>Widget::Widget(QWidget *parent): QWidget(parent)
{QVBoxLayout *layout=new QVBoxLayout(this);m_progress=new QProgressBar;layout->addWidget(m_progress,0,Qt::AlignCenter);DownloadThread *t=new DownloadThread(m_progress);connect(t,SIGNAL(finished()),t,SLOT(deleteLater()));t->start();
}Widget::~Widget()
{}DownloadThread::DownloadThread(QObject *receiver, QObject *parent):QThread(parent),m_receiver(receiver)
{}DownloadThread::~DownloadThread()
{}void DownloadThread::run()
{Worker *worker=new Worker;connect(worker,SIGNAL(progressChanged(int)),m_receiver,SLOT(setValue(int)));exec();
}Worker::Worker(QObject *parent):QObject(parent),m_progress(0)
{connect(&m_timer,SIGNAL(timeout()),this,SLOT(onTimeout()));m_timer.start(100);
}Worker::~Worker()
{qDebug()<<"Worker::~Worker()";
}void Worker::onTimeout()
{if(m_progress<100){m_progress++;emit progressChanged(m_progress);}else{m_timer.stop();QThread::currentThread()->quit();delete this;}
}

Qt线程间通信-信号与槽通信相关推荐

  1. 【QT编程】QT对象间通讯——信号与槽

    01.目录 文章目录 01.目录 02.信号与槽介绍 03.信号与槽机制 04.信号(Signal) 05.槽函数(Slot) 06.一个示例 07.一个真实的示例 08.信号和槽使用默认参数 09. ...

  2. Qt线程间信号槽传递自定义数据类型(qRegisterMetaType的使用)

    Qt线程间信号槽传递自定义数据类型(qRegisterMetaType的使用) #include <QMetaType> CFileDataModel::CFileDataModel(QO ...

  3. Qt多线程使用 和 信号与槽传参 需要注意的问题

    Qt中提供了线程类,默认窗口是主线程,这个时候如果我们的业务逻辑很费时,就会一直使用主线程,页面可能会卡顿甚至崩溃.那么将业务逻辑放入子线程,能够避免页面的卡顿,保证操作是流畅的,还能提高程序的执行效 ...

  4. Qt编程中的信号和槽机制

    Qt编程中的信号和槽机制 在使用自定义类创建一个按钮之后,只能看到一个按钮的图形,但是使用鼠标点击并无任何反应,下面想要实现一个"点击按钮可以关闭窗口"的功能. 关闭窗口的功能可以 ...

  5. Qt线程间通信-自定义事件

    线程间通信: 1.自定义事件:postEvent(): 2.信号与槽[本质也是通过自定义事件实现的] 注意:每个线程都有自己的事件循环 自定义事件: 1.从QEvent继承: 2.registerEv ...

  6. Qt图形界面编程入门(信号和槽通信机制)

    信号和槽机制是Qt的核心机制,可以让编程人员将互不相关的对象绑定在一起,实现对象之间的通信. 声明了信号的对象,当其状态改变时,信号就由该对象发送出去,而且该对象只负责发送信号,它不知道另一端是谁在接 ...

  7. Python Qt GUI设计:信号与槽的使用方法(基础篇—7)

    目录 1.信号与槽的概念 2.信号与槽的基础函数 2.1.创建信号函数 2.2.连接信号函数 2.3.断开信号函数 2.4.发射信号函数 3.信号和槽的使用方法 3.1.内置信号与槽的使用 3.2.自 ...

  8. Qt修炼手册4_信号与槽

    1.前言 为了处理个体间的通信事件,Qt提供了信号与槽.信号与槽不仅可以处理GUI上发生的事件,也可以实现个体间的数据通信.值得深入把握. 2.信号与槽 信号与槽是一种用于对象间通信的机制.为了用户在 ...

  9. Qt工作笔记-使用信号与槽让两个界面进行数据通信

    今天在项目中,发现有一个十分重要的功能,就是2个界面进行数据通信. 记得1年多前,刚刚学习Qt,对这个无法理解,然后经过一年多的学习和理解,在此把自己学习的感悟和知识在此总结下. 下面是使用emit ...

最新文章

  1. 机器学习笔记十:各种熵总结
  2. java zero copy 实现,关于Zero Copy
  3. Java-Scanner进阶使用
  4. 重建道路(洛谷-P1272)
  5. CodeForces 1506C(暴力求最长连续子串) acm寒假集训日记21/12/31or22/1/1
  6. php 正则xml文件,php 读取xml的方法三---用php正则表达式来记取数据
  7. 吴恩达深度学习2.1练习_Improving Deep Neural Networks_Regularization
  8. CRT工具远程登陆Google Cloud远程ssh登录方法
  9. IT项目范围管理案例分析——柳工错在哪里?
  10. 使命召唤16计算机内存不足,使命召唤16出现一个问题怎么解决
  11. 在ASP.NET中自动给URL加上超级链接
  12. Qt 判断集合中的元素是否全部相同
  13. 10只狗怎么鉴别1000瓶水哪瓶有毒
  14. visual assist x太卡了_河西区专业达格XD7500租赁 X-RAY -哪家好-老友网
  15. 实验一:彩色空间转换(YUV2RGB)
  16. 15.A Syntactic Neural Model for General-Purpose Code Generation
  17. 北科计算机网络真题,北京科技大学计算机组成原理和数据结构历年试题及笔记...
  18. 174. 地下城游戏;剑指 Offer 40. 最小的k个数;378. 有序矩阵中第K小的元素;703. 数据流中的第K大元素
  19. 描述性统计部分(一)----统计量
  20. SpringBoot整合redis使用setnx完成分布式锁

热门文章

  1. 解析应用结构,优化网络效能
  2. 拿起电话就开始给(飞鸽传书3.0)
  3. 『飞秋』在ASP.NET服务器端过程中使用WebBrowser的注意事项
  4. 20岁MM和25岁MM的区别(非原创,分享贴)
  5. 我同事今天被裁了,但我却涨了1万工资!
  6. CSS裸奔节,一个被遗忘的前端节日!
  7. 用java写秋道程序_Java开发者使用C++写程序踩的坑
  8. OpenCV中霍夫圆检测
  9. R语言学习 - 热图美化 (数值标准化和调整坐标轴顺序)
  10. 谈谈数次生信线下活动的收获和体会