QT不同线程间signal-slot机制的值传递

signal-slot机制是QT核心,也是QT解决线程之间通信的一大亮点。深刻理解其两大特性:

1loosely coupled

sender与receiver互不关心,一个signal可以被多个slot获取,signal可以触发另一个signal。

2type-safe

connect连接时,遵守严格的参数约定,slot参数必须与signal参数保持一致,slot参数数量可以少于signal。

现在code看看究竟。测试方法:

创建两个dialog窗口:dialog和subdialog。subdialog窗口通过dialog窗口的一个QPushbutton调出。

subdialog窗口上的一个QPushbutton emit 一个信号:

signal_subdialog(num1, num2);

提前赋值:

void subdialog::slot1()

{

num1 = 1;

num2 = 2;

emit signal_subdialog(num1, num2);

qDebug("signal emit");

}

主窗口设置一个QLineEdite控件来接收显示从信号接收的数据。

connect(dialog1, SIGNAL(signal_subdialog(int, int)), this, SLOT(slot_receive(int, int)));

测试顺利通过。

总结:

  1. signal 在sender的class里声明,没有定义,声明时带上形参,只是形参而已,起到类型声明的作用。
  2. slot在receiver的class里声明并定义,一般为public slots,也要带上形参,个数不超过signal形参个数。
  3. 将sender class 声明为receiver class的数据成员(一般为private)。
  4. 在receiver class的对象中 connect,保持signal和slot的参数类型一致。只写类型,不带形参名。
  5. slot定义时形参就是从signal接收来的数据。

void Dialog::slot_receive(int tmp1, int tmp2)

{

shownumber1 = tmp1;

shownumber2 = tmp2;

qDebug()<<shownumber1<<shownumber2;

line->setText(QString("receive number is %1 and %2").arg(shownumber1).arg(shownumber2));

}

完整代码:

http://download.csdn.net/detail/hustyangju/6778685

QT不同线程间signal-slot机制的值传递相关推荐

  1. Qt oracle消息队列,QT QThread 线程间消息队列

    QT 提供了良好的开发包:线程间也可以实现消息队列的方式 类似 windows PostThreadMessage的工作方式.同时比普通队列简单的很多. 但是需要稍微做特殊处理: 1. CMyThre ...

  2. Java 线程间的通信机制(等待和唤醒机制)

    一. 线程间通信 概念:多个线程在处理同一个资源,但是处理的动作(线程的任务)却不相同. 例如:线程A用来生成包子的,线程B用来吃包子的,包子可以理解为同一资源,线程A与线程B处理的动作,一个是生产, ...

  3. [转载]qt信号signal和槽slot机制

    好东西! 原文地址:qt信号signal和槽slot机制作者:fox1987 信号与槽作为QT的核心机制在QT编程中有着广泛的应用,本文介绍了信号与槽的一些基本概念.元对象工具以及在实际使用过程中应注 ...

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

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

  5. Java多线程编程-(4)-线程间通信机制的介绍与使用

    上一篇: Java多线程编程-(1)-线程安全和锁Synchronized概念 Java多线程编程-(2)-可重入锁以及Synchronized的其他基本特性 Java多线程编程-(3)-线程本地Th ...

  6. Qt中的信号与槽机制解析

    注:要想使用Qt的核心机制信号与槽,就必须在类的私有数据区声明Q_OBJECT宏,然后会有moc编译器负责读取这个宏进行代码转化,从而使Qt这个特有的机制得到使用. 所谓信号槽,简单来说,就像是插销一 ...

  7. Qt5 中的 signal/slot 新语法

    Qt 5 Alpha 已经发布.我们会在后面的文章中看到 Qt 5 的新变化.今天,我们先来看一下 Qt 5 带来的一个最主要的变化:signal/slot 机制的改变. Qt 5 之前的语法 在 Q ...

  8. Linux 多线程 - 线程异步与同步机制

    I. 同步机制 线程间的同步机制主要包括三个: 互斥锁: 以排他的方式,防止共享资源被并发访问: 互斥锁为二元变量, 状态为0-开锁.1-上锁; 开锁必须由上锁的线程执行,不受其它线程干扰. 条件变量 ...

  9. Qt次线程向主程序发送信号收不到的问题

    问题的提出: Qt次线程向主程序发送信号收不到,信号槽connect返回也是true,排查原因如下: 信号或槽函数中的参数用到了自定义类型,如果要在Qt信号槽中使用自定义类型,需要注意使用qRegis ...

最新文章

  1. iMeta期刊纸质版开始免费订阅(包邮)——第一期创刊收藏版
  2. 反汇编教程及汇编命令详解(一)
  3. 张艾迪(创始人): 梦想与未来
  4. opengl win32 nehe
  5. 初窥江湖之PhotoShop抠图(一)
  6. SpringBoot2.1.5 (32)--- SpringBoot整合 Freemaker 模板引擎
  7. android studio的 gradle 依赖同步错误解决方法
  8. D1net阅闻:Google发布了能理解人类语言的云服务
  9. html基础之 input:type
  10. sql server系统表详细说明(2)
  11. sqlite具体操作篇
  12. python立体匹配评价_综述翻译:机器学习与立体匹配(一)
  13. Atitit cms
  14. eplan p8详细安装步骤文库_EPLAN_P8_2.1.6 安装步骤
  15. Idea一不小心把Main menu头部菜单关闭还原的解决办法
  16. CSS的前景色和背景色,高度和宽度,字体属性,文本阴影,抖音字体
  17. kafka的auto.offset.reset设置earliest和latest区别
  18. mocha检测c语言,mocha的时序规则讲解
  19. 第十五章 Caché WebSocket
  20. 如何开发一个动物识别系统毕业设计毕设作品

热门文章

  1. lucene-SpanNotQuery和SpanOrQuery交迭与全局跨度
  2. Android 相关翻译
  3. linux之ClamAV杀毒软件安装配置
  4. SVG SMIL animation动画详解
  5. 基于Yarn的Spark环境,统计哈姆雷特词频(1)
  6. html5-5 HTML5表单元素和内嵌框架
  7. Forrester报告:人工智能将取代6%的工作岗位
  8. C# 合并多种格式文件为PDF
  9. MSSQL日期格式转换函数(使用CONVERT)
  10. Hyper-V Server 虚拟光纤通道