Qt 信号与槽机制

news/2024/10/18 9:16:31/

Qt 信号与槽机制

    • 信号与槽机制的连接方式
    • 信号与槽机制的优点
    • 信号与槽机制的效率

QT提供了信号与槽机制用于完成界面操作的响应,信号与槽机制是完成任意两个QT对象之间的通信机制。

信号(Signal) 就是在特定情况下被发射的事件,例如PushButton 最常见的信号就是鼠标单击时发射的 clicked() 信号,一个 ComboBox 最常见的信号是选择的列表项变化时发射的 CurrentIndexChanged() 信号。GUI 程序设计的主要内容就是对界面上各组件的信号的响应,只需要知道什么情况下发射哪些信号,合理地去响应和处理这些信号就可以了。

槽(Slot) 就是对信号响应的函数。槽就是一个函数,与一般的C++函数是一样的,可以定义在类的任何部分(public、private 或 protected),可以具有任何参数,也可以被直接调用。槽函数与一般的函数不同的是:槽函数可以与一个信号关联,当信号被发射时,关联的槽函数被自动执行。

信号与槽机制的连接方式

  • 基本格式
connect(Object1,SIGNAL(signal1),Object2,SLOT(slot2));
  • 一个信号可以和另一个信号相连
connect(Object1,SIGNAL(signal1),Object2,SIGNAL(signal2));

Object1的信号1发送可以触发Object2的信号2发送

  • 同一个信号可以和多个槽相连
connect(Object1,SIGNAL(signal1),Object2,SLOT(slot2));
connect(Object1,SIGNAL(signal1),Object3,SLOT(slot3));
  • 同一个槽可以响应多个信号
connect(Object2,SIGNAL(signal2),Object1,SLOT(slot1));
connect(Object3,SIGNAL(signal3),Object1,SLOT(slot1));

SIGNAL() 和 SLOT()是Qt定义的两个宏,它们返回其参数的C语言风格的字符串(const char*)。因此,下面关联的信号和槽的两个语句是等同的:

connect(buttoon, SIGNAL(clicked()), this, SLOT(showArea()));
connect(buttoon, "clicked()", this, "showArea()");

信号与槽机制的优点

  • 类型安全

关联的信号与槽的签名必须是等同的,也就是信号的参数类型和参数个数与接收该信号的槽的参数类型和参数个数相同。不过槽的参数个数可以少于信号的参数个数,但是缺少的参数必须是信号参数的最后一个或多个。

  • 松耦合

信号和槽机制减弱了QT对象的耦合度。激发信号的对象无须知道是哪些对象的哪些槽需要对其相应,也不关心信号有没有被接收到。同样的槽也不知道哪些信号关联了自己。一旦关联信号和槽,QT就保证了适合的槽得到了调用。

一个类若要支持信号和槽,就必须从QObject或QObject的之类继承。信号和槽不支持对模板的使用。

信号与槽机制的效率

信号与槽机制增强了对象间通信的灵活性,这也损失了一些性能主要原因如下,但是相比之下这点性能损失是值得的

  • 需要定位接收信号的对象
  • 安全地遍历所有的关联(一个信号对多个槽)
  • 编组与解组传递的参数
  • 在多线程时,信号可能需要排队

http://www.ppmy.cn/news/59326.html

相关文章

ubuntu: ubuntu22.04安装redis数据库,并设置开机自启动

一、安装步骤 1、下载安装包 wget http://download.redis.io/releases/redis-7.0.9.tar.gz 2、解压 tar -zxvf redis-7.0.9.tar.gz 3、复制到解压缩的包移动到/usr/local/ sudo mv ./redis-7.0.9 /usr/local/ 4、编译 cd /usr/local/redis-7.0.9 sudo make 5、测试: 时间会比…

内网工作组信息收集

本机信息收集 查询网络配置-ipconfig/all查询用户列表查询进程列表查询操作系统及安装软件版本信息查询端口列表查询补丁列表查询本机共享查询防火墙配置查询并开启远程连接服务 查询网络配置-ipconfig/all 查询用户列表 net user 查看本机用户列表 net localgroup adm…

python实例分析

Python是一种高级编程语言,具有简单易学、可读性强和易用性等特点,因此在Web开发、科学计算、数据分析、人工智能等领域被广泛使用。Python的语法简单明了,易于阅读和理解,使得开发者可以更快地编写代码,而不用花费过多…

三种常用的以太网端口链路类型:Access、Hybrid和Trunk

以太网是计算机网络中最常用的协议之一,它允许计算机在同一局域网上通信。在以太网中,交换机(Switch)是一个重要的组件,它们有许多不同的端口,用于连接不同的设备。为了管理和维护这些端口,有三…

python算法中的深度学习算法之受限玻尔兹曼机(详解)

目录 学习目标: 学习内容: 受限玻尔兹曼机 Ⅰ. 有向无环图模型 Ⅱ. 能量模型

基于STM32的开源简易示波器项目

目录 ​一、前言 二、硬件接线 三、信号的采集 四、代码配置 五、数据的处理 六、模拟正弦波输出 七、模拟噪声或三角波输出 八、显示函数与按键控制 ​一、前言 该项目是基于正点原子精英板制作的一个简易示波器,可以读取信号的频率和幅值,并可…

【热门框架】Mybatis-Plus怎样进行映射匹配兼容?Mybatis-Plus的ID有哪些生成策略

Mybatis-Plus提供了两种映射匹配兼容的方式:驼峰转下划线和全局配置。 驼峰转下划线 默认情况下,Mybatis-Plus会将Java类中的驼峰命名方式自动映射到数据库表中的下划线命名方式。例如,Java类中的userName属性会自动映射到表中的user_name字…

SpringCloud_Gateway服务网关

文章目录 一、SpringCloudGateway服务网关概论1、SpringCloudGateway服务网关概论2、SpringCloudGateway的三大核心概念 二、SpringCloudGateway的路由及断言1、子模块项目SpringCloudGateway的搭建2、SpringCloudGateway_Java API构建路由3、SpringCloudGateway的动态路由功能…