Qt Signals and Slots

简介

信号与槽是Qt中不同对象之间进行通信的一种机制,是Qt最重核心的特性,它独立于GUI的事件循环。
信号被发射,与之连接的槽或者其他信号会被依次“执行”或发射(信号发射后是否立即返回取决于QObject::connect()
type参数,除Qt::QueuedConnection以外其余的连接方式都会在信号被发射后阻塞,直到所有槽执行返回)。

特性
  • 信号与槽机制是类型安全的:
  1. 信号与槽的函数参数一致,而且允许槽函数的参数少于信号,多余的参数被舍弃;
  2. 如果使用函数指针的形式,在编译器可以完成检查,如果使用宏形式,需要在运行时完成检查。
  • 信号与槽是松耦合的:
  1. 信号的发射无需关注是否有槽函数接收;
  2. 一个信号可以连接多个槽,也可以多个信号连接一个槽,甚至可以将信号与另一个信号连接。
使用
  • 继承于QObject或其子类
  • 在类的头部声明Q_OBJECT
  • 信号声明在public区域,无需返回值,无需定义,用signals:标明
  • 槽函数的用<access level> slots:标明,可以定义在不同的访问区域,与普通函数唯一不同的地方在于它可以连接在信号上,当被用作槽的时候,可以无视访问权限
  • 通过QObject::connect()方法连接信号与槽,在合适的时机执行emit <your signals>发射信号
  • QObject:connect()有多个重载形式,可以使用函数指针或者SIGNALSLOT宏,后者需要标明参数类型,但是不可以带参数名
性能

通过信号与槽机制执行槽函数要慢于直接执行槽函数,大约相差10倍(对于非虚函数),仅涉及函数调用的开销,通常来说,函数实际执行过程中的开销远大于调用的开销,因此这部分性能丢失与信号与槽带来的灵活与便捷相比完全可以忽略。

默认值参数
  • 信号与槽同样允许使用默认值参数,如果使用函数指针方式,与之前没有区别;
  • 使用SIGNALSLOT需要注意,默认值参数可以不写, 只要保证信号的参数与槽的参数匹配
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值