随笔 - 37  文章 - 0  评论 - 0  阅读 - 62450

QT-信号和槽机制

信号和槽

只有QObject及其派生类才能使用信号和槽机制,且在类之中还需要使用Q_OBJECT宏。
1、信号需符合以下规则:
  信号使用signals关键字声明,在其后面有一个冒号“:”,在其前面不能有public、private、protected访问控制符,信号默认是public的
  信号只需像函数那样声明即可,其中可以有参数,参数的主要作用是用于和槽的通信,这就像普通函数的参数传递规则一样。信号虽然像函数,但是对他的调用方式不一样,信号需要使用emit关键字发送
  信号只需声明,不能对其进行定义,信号是由moc自动生成的
  信号的返回值只能是void类型的

2、声明槽需符合以下规则:
  声明槽需要使用slots关键字,在其后面有一个冒号“:”,且槽需使用public、private、protected访问控制符之一。
  槽就是一个普通的函数,可以像使用普通函数一样进行使用,槽与普通函数的主要区别是,槽可以与信号关联。

3、发射信号需符合以下规则:
  发射信号需要使用emit关键字,注意,在emit后面不需要冒号。
  emit发射的信号使用的语法与调用普通函数相同,比如有一个信号为void f(int),则发送的语法为:emit f(3);
  当信号被发射时,与其相关联的槽函数会被调用(注意:信号和槽需要使用QObject::connect函数进行关联之后,发射信号后才会调用相关联的槽函数)。
  注意:因为信号位于类之中,因此发射信号的位置需要位于该类的成员函数中或该类能见到信号的标识符的位置。

4、信号和槽的关系
  槽的参数的类型需要与信号参数的类型相对应
  槽的参数不能多余信号的参数,因为若槽的参数更多,则多余的参数不能接收到信号传递过来的值,若在槽中使用了这些多余的无值的参数,就会产生错误。
  若信号的参数多余槽的参数,则多余的参数将被忽略。
  一个信号可以与多个槽关联,多个信号也可以与同一个槽关联,信号也可以关联到另一个信号上。
  若一个信号关联到多个槽时,则发射信号时,槽函数按照关联的顺序依次执行。
  若信号连接到另一个信号,则当第一个信号发射时,会立即发射第二个信号。


参考链接:https://blog.csdn.net/hyongilfmmm/article/details/83015045

posted on   Cynthia_W  阅读(206)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示