第一章 1.4 信号,槽和元对象
相比于C++ , Qt的信号和槽是一个强大的功能 。 信号和槽对对象之间传递数据提供了一种灵活高效的方法 。 信号和槽的概念是Qt首创 , 后来的Boost库也是借鉴Qt中的概念实现自己的信号槽 。
【第一章 1.4 信号,槽和元对象】直接看书中的示例:
文章插图
文章插图
我们直接看信号这种方法是怎么用的 。 首先在类声明的signal(1)域中声明信号 , 无须定义 , 在需要的时候使用emit(5)将参数发送出去 , 那么发送出去之后的接收者是谁呢 , 就是文章开始处提到的槽函数(3) 。 当然信号发送出去 , 相应的槽函数能够接收到 , 有两个前提 , 首先要把信号和槽关联起来 , 其次 , 信号和槽的参数 , 槽函数的参数<=信号的参数 , 同时参数类型必须相同 。 信号和槽的关联使用connect函数 。 书中示例如下:
文章插图
文章插图
这本书是Qt4时代出版的 , 发展到Qt5 , 官方推荐链接信号槽的方法如下:
文章插图
关于信号和槽的连接有很多内容 , 包括上述的第二种写法为什么被推荐 , 结合C++11的lambda表达式 , 连接方式等 , 后边我会写一篇专门的文章来讲解 。
信号和槽是通过函数指针来实现的 。 注意到上面signal域里面的声明的textChanged , 我们并没有去实现它 。 这其实依赖的是Qt强大的元编译 , moc 。 moc会帮助我们实现textChanged 。 此函数使用持有连接槽的元对象 , 可以调用连接到信号的任何合法的槽函数 。 元对象包含指向槽的函数指针 , 以及它们的名称和参数 , 还包含可用信号及其名称和参数类型的列表 。 connect函数通过元对象 , 将槽添加到信号的调用列表中 。 当上述提到的信号和槽的参数相互匹配时 , 则在信号和槽之间建立了有效连接 。
没接触过Qt的朋友可能对上述提到的元编译有疑问 , 我们上一篇讲的是Qt应用程序的构建 , 那在下一篇中会解释Qt程序和普通的C++程序构建过程的不同 。
- 用户|5G信号有猫腻,又在考验用户的智商?
- 拍照|iPhone12还没捂热13就曝光了,屏幕、信号、拍照均有升级!
- 升级|小米11整体大升级!外观两种打孔方案,2K屏+5纳米+1.44亿主摄
- 高通|为什么iphoneXR和iphoneXS信号不稳定?原因正式被确认,望周知!
- 阻挡|5G的推出真的阻挡了4G 的信号?中国移动正面给出回应
- Linux信号量(2)-POSIX 信号量
- Linux信号透彻分析理解与各种实例讲解
- 检测DTU信号是否稳定的4个方法
- 电脑出现无信号或者屏幕显示出现缺三基色,按此图接口定义维修。
- 信号|手机信号增强贴是智商税!央视调查:不可能增强信号