- 信号槽的概念
为了实现人机的交互,实现按钮的点击,执行某个功能,就需要用到Qt中的信号槽机制。
信号槽是Qt基于C++语法上新增的特性,可以实现对象之间的通信,形成一定的因果关系。
使用信号槽的对象需要具备两个条件:
通信的对象必须继承自QObject
类中要有Q_OBJECT宏
- 函数原型
QObject类是所有Qt对象的基类,此类中有一个静态成员函数connect,用于连接信号槽之间的因果关系,函数原型如下:
![](https://i-blog.csdnimg.cn/blog_migrate/9ee46397bb7036c0b4bd461ce7ffca3e.png)
参数1:发射者,也就是通信的对象、信号槽触发的来源,比如按钮对象
参数2:信号函数,需要使用SIGNAL()包裹,表示发射者的触发效果,例如点击
参数3:接受者,通信对象,是执行结果代码的主体,比如在那个窗口执行
参数4:槽函数,使用SLOT()包裹,表示接受者要执行的函数
为了方便讲解各种场景下使用信号槽的不同方式,分别使用三种类型进行说明:
自带信号→自带槽
自带信号→自定义槽
自定义信号→自定义槽
2.1自带信号→自带槽
这种连接方式最简单,因为信号函数和槽函数都在Qt中预设了,只需要通过connect函数“连线”就可以了。
【例子】点击按钮,关闭窗口
分析:
参数1:按钮对象
参数2:点击函数
参数3:窗口对象
参数4:关闭函数
//dialog.h
#ifndef DIALOG_H
#define DIALOG_H
#include <QDialog>
#include <QPushButton>
class Dialog : public QDialog
{
Q_OBJECT
public:
Dialo