Qt的信号与槽机制(学习笔记)
1 信号和槽是什么
- 信号和槽是QT的核心机制,是QT区别于其他工具包的重要地方。
- 信号和槽是QT自行定义的一种对象间的通信机制,独立于标准的C/C++语言,因此要处理信号和槽,必须借助一个称为moc(Meta Object Compiler)的QT工具包,该工具是一个C++预处理程序,它为高层次的事件处理自动生成所需要的附加代码。
- 可以将一个信号和一个槽连接、多个信号与一个槽进行连接,也可以将一个信号和很多槽连接,甚至一个信号可以和一个信号连接。总之,信号和槽之间的关系可以一对一、一对多、多对一,信号和槽构建了一个强大的部件编程机制。
- 信号和槽机制完全独立于任何GUI事件循环。在GUI中,当改变了一个组件时,总是希望其他组件可以了解到这种变化。例如,用户点击关闭按钮,则执行窗口的close()函数来关闭窗口。
- 对对象的状态监听使用事件过滤器等,但是之后该做什么,使用信号和槽机制。
1.1 信号是什么
- 信号是槽的发送者所发送的。
- 如果定义了某种信号,当对象改变其状态时,信号就会被发射(emit)出去,但不去管是谁接收,也不管返回值。
- 当一个信号发射时,与其相关联的槽将被立刻执行,就像一个正常的函数调用一样。
1.2 槽是什么
槽是C++的普通成员函数,它是信号的接收者,可以被正常调用。它在信号发射后被调用来响应这个信号。
2 信号和槽怎么用
- 信号在QT中的关键字为signals,槽为slots。
- 信号默认为public,可以从任何地方发射,所以不要加限定符。
- 信号的返回值只能为void类型。
- 信号只能在QObejt的子类或其派生的类中使用。
- 要使用信号和槽机制,在类声明的最开始要添加Q_OBJECT宏。
2.1 例子
新建一个Qt Widgets应用
基类选择QWidget
新建一个文件,选择Qt中的Qt 设计师界面类
选择Dialog without Buttons
类名设置为MyDialog
然后在mydialog.h中声明信号myDialogReturn
双击mydialog.ui文件进入设计模式,在界面中添加一个Spin box和一个Push Button,并双击Push Button将其显示文本改为“确定”
右键Push Button,点击“转到槽”,然后点击clicked()信号
会自动跳转到如下界面,然后在函数中写如下代码,也就是说点击这个按钮后,会发送myDialogReturn信号。发射信号使用emit关键字。
然后到widget.h中添加一个槽
打开widget.ui文件,拖入一个Label,更改其文本为“选择的值为:”,太小了看不到字可以拉大Label。
在widget.cpp中添加如下代码
然后运行即可,效果如下
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!