第一章 1.4 信号,槽和元对象
相比于C++ , Qt的信号和槽是一个强大的功能 。 信号和槽对对象之间传递数据提供了一种灵活高效的方法 。 信号和槽的概念是Qt首创 , 后来的Boost库也是借鉴Qt中的概念实现自己的信号槽 。
直接看书中的示例:
文章插图
文章插图
我们直接看信号这种方法是怎么用的 。 首先在类声明的signal(1)域中声明信号 , 无须定义 , 在需要的时候使用emit(5)将参数发送出去 , 那么发送出去之后的接收者是谁呢 , 就是文章开始处提到的槽函数(3) 。 当然信号发送出去 , 相应的槽函数能够接收到 , 有两个前提 , 首先要把信号和槽关联起来 , 其次 , 信号和槽的参数 , 槽函数的参数<=信号的参数 , 同时参数类型必须相同 。 信号和槽的关联使用connect函数 。 书中示例如下:
文章插图
文章插图
这本书是Qt4时代出版的 , 发展到Qt5 , 官方推荐链接信号槽的方法如下:
文章插图
关于信号和槽的连接有很多内容 , 包括上述的第二种写法为什么被推荐 , 结合C++11的lambda表达式 , 连接方式等 , 后边我会写一篇专门的文章来讲解 。
信号和槽是通过函数指针来实现的 。 注意到上面signal域里面的声明的textChanged , 我们并没有去实现它 。 这其实依赖的是Qt强大的元编译 , moc 。 moc会帮助我们实现textChanged 。 此函数使用持有连接槽的元对象 , 可以调用连接到信号的任何合法的槽函数 。 元对象包含指向槽的函数指针 , 以及它们的名称和参数 , 还包含可用信号及其名称和参数类型的列表 。 connect函数通过元对象 , 将槽添加到信号的调用列表中 。 当上述提到的信号和槽的参数相互匹配时 , 则在信号和槽之间建立了有效连接 。
【第一章 1.4 信号,槽和元对象】没接触过Qt的朋友可能对上述提到的元编译有疑问 , 我们上一篇讲的是Qt应用程序的构建 , 那在下一篇中会解释Qt程序和普通的C++程序构建过程的不同 。
推荐阅读
- 近期浙江引来这么多重磅级“帮手”传递什么信号?
- 牛人将90分钟完整电影塞进1.44MB软盘 还带音频
- iPhone 12信号差真实原因曝光:不是基带问题
- iPhone12 重现iPhone 7“信号门”,但库克沉默
- 将要报废的手机会出现这三个信号,你出现了吗?
- 手机信号增强贴 警惕别被伪科技忽悠了
- 苹果手机信号差问题基本确定,英特尔如释重负,背了整整4年的锅
- 4G信号越来越差,网速越来越慢?改了这项设置,信号满格了
- 英特尔Alder Lake-S早期工程样品曝光:16核/24线程 主频仅1.4GHz
- 距海岸38公里外也能覆盖 青岛完成超远距离海上5G信号测试