一、自定义槽
所谓的自定义一个槽函数,操作过程和自定义一个普通的成员函数没有区别。
public slots:
此处的slots是Qt自己拓展的关键字(不是C++标准中的语法)
Qt里广泛的使用了元编程技术(基于代码,生成代码)
qmake构建Qt项目的时候,就会调用专门的扫描器,扫描代码中特定的关键字。(slots这种)
基于关键字自动生成一大堆相关的代码。
1、通过代码自定义槽![](https://img-blog.csdnimg.cn/direct/3409d7e698fc4329a0d485b08a858b83.png)
2、通过ui自定义槽
选择clicked()即可 (还包含了QPushButton父类的信号)
QT Creator直接给我生成好一个函数 我们可以直接吧信号和槽建立上联系
二、自定义信号
Qt中也允许自己定义信号
自定义槽函数, 非常关键.开发中大部分情况都是需要自定义槽函数的.槽函数, 就是用户触发某个操作之后,要进行的业务逻辑
自定义信号,比较少见. 实际开发中很少会需要自定义信号
信号就对应到用户的某个操作~
在 GUI, 用户能够进行哪些操作,是可以穷举的,Qt 内置的信号,基本上已经覆盖到了上述所有可能的用户操作
因此,使用 Qt 内置的信号, 就足以应付大部分的开发场景了
Qwidget
咱们的 Widget 虽然还没有定义任何信号,由于继承自 QWidget,和 QObject,这俩类里面已经提供了
一些信号了,可以直接使用.
1.但是,信号, 则是一类非常特殊的函数.程序员只要写出函数声明,并且告诉 Qt,这是一个"信号"即可,这个函数的定义,是 Qt 在编译过程中,自动生成的,(自动生成的过程,程序员无法干预)
信号在 Qt 中是特殊的机制. Qt 生成的信号函数的实现,要配合 Qt 框架做很多既定的操作
2.作为信号函数,这个函数的返回值,必须是 void有没有参数都可以. 甚至也可以支持重载.
signals:
这个也是Qt自己拓展出来的关键字
qmake的时候,调用一些代码的分析/生成工具,扫描类中包括signals这个关键字的时候,此时,就会自动把下面的函数声明认为是信号,并且给这些信号函数主动的生成函数定义。
connect(this, &Widget::mySignal, this, &Widget::handleMySignal);
建立连接,不代表信号发出来了
接收信号用emit
如何才能触发出自定义的信号呢?
Qt 内置的信号,都不需要咱们手动通过代码来触发
用户在 GUL, 进行某些操作,就会自动触发对应信号,(发射信号的代码已经内置到 Qt 框架中了)