信号与槽
信号与槽的机制简述
信号与槽是Qt中的核心特性,其用于多个对象间的通信,通过组件发出信号(Signal),槽(Solts)函数接收,实现不同组件之间的通信。
其中,信号和槽函数是松耦合的,当一个对象发出信号,该对象不知道也不关心哪个对象的槽函数会接收这个信号。Qt的信号和槽函数机制确保,如果将一个信号连接到一个槽函数上,该槽函数将在正确的时间被调用。信号和槽函数可以接受任意数量的任意类型的参数。它们完全是类型安全的。所有从QObject或它的一个子类(例如,QWidget)继承的类都可以使用信号和槽槽函数机制。当对象改变其状态时,可能就会发出信号(这一点由开发人员和父类确定其关联的信号什么时候发出)。
信号 [Signal]
信号就是事件(按钮点击、内容发生改变等),或者状态(窗口选中、切换等);当程序触发了某种事件,那么即可发射出来一个信号。
槽 [Solt]
如果想捕获这个信号,然后执行相应的逻辑代码,那么就需要使用到槽,槽实际上是一个函数,当信号发射出来后,会执行与之绑定的槽函数。
连接信号与槽
为了实现触发某个信号时想执行对应的函数,就需要将信号和对应的槽函数绑定到一起,这个过程的实现如图:
连接信号与槽需要使用:connect()
其中 connect 函数接收四个参数:
- 谁发出的信号
- 发出的什么信号
- 谁处理这个信号
- 如何处理这个信号
connect 函数在使用时,需要书写在 widget.cpp 中的构造函数中。
示例程序 | |
---|---|
例如,将LineEdit这个文本框发出的信号连接至槽函数中:
传入参数
这个函数接收了四个参数
该参数为:谁发出的信号,即ui控件中名为:lineEdit 的文本框空间。
该参数为:发出的什么信号,即returnPressed()
该函数是属于QLineEdit中的信号函数,其作用为当用户在该文本框中按下回车即会发出returnPressed()
这个信号。
该参数为:谁处理这个信号,即处理该信号的函数问该构造函数本身。
该参数为:谁处理这个信号,即该参数便将该信号连接到了槽函数returnPressed(on_pushButton_clicked())
中。
对于信号与槽函数的连接,connect 函数还有第二种写法,即用对地址的访问来绑定相应的参数: