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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值