Qt 信号与槽

发布于:2025-03-16 ⋅ 阅读:(17) ⋅ 点赞:(0)

目录

Qt信号和槽

connect函数

connect使用方法

自定义信号 与 自定义槽

Qt界面化工具自动生成的槽

自定义信号

带参数的信号和槽

信号与槽的断开


Qt信号和槽

谈到信号,设计3个要素

信号源:谁发出了信号

信号触发条件:哪个控件的哪个函数被调用了,用户进行了不同的操作,会触发不同的操作

信号处理方式:需要哪个控件的哪个函数进行处理

信号处理方式也可以被称为:槽(slot) 即处理函数 也可称为槽函数

Qt可以利用connet 将信号和槽关联起来

connect函数

是QObject提供的静态成员函数

QObject是所有控件的祖宗

connect使用方法

对Button进行点击,Widget就会关闭

信号函数和槽函数的图标区别

传入的是函数指针,为什么const char*能接受?

const char*是之前的写法,现在使用了宏替代

Qt5 开始,对connect使用了泛型编程,不需要进行转换,所以就有了现在的写法。

自定义信号 与 自定义槽

Qt界面化工具自动生成的槽

在连接信号和槽时不是需要connect?

除了connect,Qt还可以使用函数名来自动连接

pushButton 发送信号对象 (ui中的对象名)

clicked 信号

头文件中自动生成了这个函数

tips:

如果我们是通过图形化界面创建控件,可以直接使用快速生成槽的方式

但是我们通过代码来创建时,需要手动去connect,因为就算将函数名写对,在头文件中没有这个connectSlotByName函数的声明;

自定义信号

在实际开发中很少使用到自定义信号

1.信号在Qt中是一个特殊的函数,我们需要对这个自定义信号进行声明,并且告诉编译器这是个信号函数

2.信号的返回值必须是void

扫描到类中的signals关键字时,会自动将以下函数声明认为是信号,并且给这些信号函数自动生成函数定义

Qt也提供了emit关键字 但是其实emit啥也没做😂 建议还是加上 代码的可读性会更高

带参数的信号和槽

信号和槽,也可以自带参数

但是信号和槽的必须传入相同的参数,主要是类型一致,但是数量不一致时,信号中的参数数量也必须必槽参数数量多

Qt中很多内置信号也自带参数

为什么这么设计 :信号中的参数数量也必须必槽参数数量多

一个槽函数,有可能会绑了多个信号

如果只是完全的一对一,那么意味着信号绑定个槽的要求会更高

如果这么设计,就允许信号和槽的绑定更灵活。

Qt中要让某个类能够使用信号和槽,需要给类中添加Q_OBJECT宏

信号与槽的断开

1.使用disconnect来断开连接

与connect用法上非常类似

使用Lambda表达式定义槽函数