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中添加如下代码
在这里插入图片描述

然后运行即可,效果如下
在这里插入图片描述
在这里插入图片描述

posted @   强里秋千墙外道  阅读(124)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示