Qt信号与槽
Qt信号与槽
参考:《Qt 5.9 C++开发指南》
信号与槽(Signal & Slot)是Qt编程的基础,也是Qt的一大创新。有了信号与槽的编程机制,在Qt中处理界面各个组件的交互操作时变得更加简单和直观。
信号就是在特定情况下被发射的事件。GUI程序设计的主要内容就是对界面上各组件的信号的响应,只需要知道什么情况下发射哪些信号,合理地去响应和处理这些信号就可以了。
槽就是对信号响应的函数。槽函数与一般的C++函数一样,可以定义在类的任何部分,可以具有任何参数,也可以被直接调用。槽函数与一般函数不同的是:槽函数可以和一个信号关联,当信号被发射时,关联的槽函数被自动执行。使用信号与槽机制可以比较容易地将信号与响应代码关联起来。
信号与槽关联是用 QObject::connect() 函数实现的,其基本格式是:
//QObject是所有Qt类的基类,在实际调用时可以忽略前面的限定符
QObject::connect(sender, SIGNAL(signal()), receiver, SLOT(slot()));
关于信号与槽的使用,有以下规则需要注意:
-
一个信号可以连接多个槽
- 当一个信号与多个槽函数关联时,槽函数按照建立连接时的顺序依次执行
- 当信号与槽函数带有参数时,在connect函数里,要写明参数类型,但可以不写参数名称
-
多个信号可以连接同一个槽
-
一个信号可以连接另外一个信号
这样,当一个信号发射时,也会发射另外一个信号,实现某些特殊的功能
-
严格的情况下,信号与槽的参数个数和类型需要一致,至少信号的参数不能少于槽的参数;如果不匹配,会出现编译错误或运行错误
-
在使用信号与槽的类中,必须在类的定义中加入宏Q_OBJECT
-
当一个信号被发射时,与其关联的槽函数通常被立即执行,只有当信号关联的所有槽函数执行完毕后,才会执行发射信号处后面的代码