接上文:QT从入门到实战x篇_xx_对象树及坐标系
本篇主要讲Qt中自带的信号和槽函数的使用方法
1. 怎样将触发与执行连接起来呢?
首先讲一个众所周知的故事:人摩擦神灯出灯神的故事
这里面人是发出摩擦信号的对象,神灯是发出出灯神的对象
对于程序我们有一下需求:点击我的按钮 关闭窗口
这个需要使用到:connect函数将发出信号的对象与执行命令的对象连接起来。
连接(connect)函数意思是,将想要处理的信号和自己的一个函数(称为槽(slot))绑定来处理这个信号。也就是说,当信号发出时,被连接的槽函数会自动被回调。这就类似观察者模式:当发生了感兴趣的事件,某一个操作就会被自动触发。
2. connect()函数最常用的一般形式:
connect(sender, signal, receiver, slot);
参数解释:
- sender:发出信号的对象
- signal:发送对象发出的信号
- receiver:接收信号的对象
- slot:接收对象在接收到信号之后所需要调用的函数(槽函数)
信号槽的优点,松散耦合,信号的发送端和接收端本身是没有联系起来的,通过connect将两端耦合起来。
3. 怎样实现点击一个按钮实现关闭界面的功能?
从上边可以知道,你需要找到对象和相应的信号和槽函数
(1)那么系统自带的信号和槽通常如何查找呢?
这个就需要利用帮助文档了,在帮助文档中比如我们上面的按钮的点击信号,在帮助文档中输入QPushButton,首先我们可以在Contents中寻找关键字 signals,信号的意思,但是我们发现并没有找到,这时候我们应该想到也许这个信号的被父类继承下来的,因此我们去他的父类QAbstractButton中就可以找到该关键字,点击signals索引到系统自带的信号有如下几个:
这里的clicked就是我们要找到,槽函数的寻找方式和信号一样,只不过他的关键字是slot。
(2)代码内容
//需求 点击我的按钮 关闭窗口
//参数1 信号得发送者 参数2 发送的信号(函数的地址) 参数3 接受者 参数4 处理的槽函数(函数地址)
connect(myBtn,&QPushButton::clicked,this,&QWidget::close);
//当接收者为this时也可以写成如下形式,即将this省略
connect(myBtn,&QPushButton::clicked,&QWidget::close);
(3)运行结果
运行之后就会看到,点击对应的按钮,窗口就会关闭。
4.学习视频地址:信号和槽1:Qt中自带的信号和槽函数的使用方法