qt信号发送间隔短而槽耗时多_Qt的信号和槽机制(Signals & Slots)

信号和槽(Signals & Slots)用于对象之间的通信。信号和槽机制是Qt的核心特性,可能也是与其他框架所提供的特性最不同的部分。信号和槽是由Qt的元对象系统(The Meta-Object System)实现的。

产生背景

在GUI编程中,当我们更改一个小部件时,我们通常希望通知另一个小部件。更一般地说,我们希望任何类型的对象都能够彼此通信。

例如,如果用户单击关闭按钮,我们可能希望调用窗口的Close()函数。

其他工具包使用回调实现这种通信。回调是指向函数的指针,因此,如果希望某个处理函数通知你某个事件,则需要将一个指向另一个函数(回调)的指针传递给处理函数。然后处理函数在适当的时候调用回调。虽然使用这种方法的成功框架确实存在,但是回调可能不够直观,而且在确保回调参数的类型正确性方面可能会遇到问题。

信号与槽

在Qt中,我们有一种替代回调技术的方法:使用信号和槽。当特定事件发生时发出信号。Qt的widgets有许多预定义的信号,但是我们总是可以子类化widgets来添加我们自己的信号。槽是响应特定信号而被调用的函数。Qt的窗口小部件有许多预定义的槽,但通常的做法是子类化窗口小部件并添加自己的槽,以便处理需要的信号。

信号和槽机制是类型安全的:信号的签名必须与接收槽的签名匹配。(事实上,槽的签名可能比它接收到的信号短,因为它可以忽略额外的参数。)由于签名是兼容的,编译器可以帮助我们在使用基于函数指针的语法时检测类型不匹配。基于字符串的信号和槽语法将在运行时检测类型不匹配。信号和槽是松散耦合的:发出信号的类既不知道也不关心哪个槽接收信号。Qt的信号和槽机制确保,如果你将信号连接到槽,该槽将在正确的时间与信号的参数一起被调用。信号和槽可以接受任意数量的任意类型的参数。它们是完全类型安全

你可能感兴趣的:(qt信号发送间隔短而槽耗时多)