一、什么是信号与槽机制
信号(signal),就是在特定情况下被发射的事件,例如 PushButton 最常见的信号就是鼠标
单击时发射的 clicked() 信号。
槽(Slot)就是对信号响应的函数。槽就是一个函数,与一般的 C++函数是一样的,可以
定义在类的任何部分(public、private 或 protected),可以具有任何参数,也可以被直接调用。
槽函数与一般的函数不同的是:槽函数可以与一个信号关联,当信号被发射时,关联的槽函数
被自动执行。
二、怎么实现
信号与槽关联是使用QObject::connect() 函数实现的,基本格式为:
QObject::connect(sender, SIGNAL(signal()), receiver, SLOT(slot()));
其中:
1、connect()是QObiect类的一个静态函数,QObiect是所有Qt类的基类
在实际使用中可以直接写为:
connect(sender, SIGNAL(signal()), receiver, SLOT(slot()));
2、sender是发射信号的对象名称,signal()是信号名称,receiver是接收信号的对象名称,slot()是槽函数的名称。
注意:在使用信号与槽的类中,必须在类的定义中加入宏 Q_OBJECT
三、实际使用
1、创建信号
信号只需声明,无需定义。所以我们只需要在 mianwindow.h 里声明信号即可
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
signals:
/* 声明一个信号,只需声明,无需定义 */
void pushButtonTextChanged();
};
2、创建槽
直接在 mianwindow.h 里直接声明槽,在 mianwindow.cpp 里实现槽的定义
槽的特点:
1、槽可以是任何成员函数、普通全局函数、静态函数
2、槽函数和信号的参数和返回值要一致
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
signals:
/* 声明一个信号,只需声明,无需定义 */
void pushButtonTextChanged();
public slots:
/* 声明一个槽函数 */
void changeButtonText();
/* 声明按钮点击的槽函数 */
void pushButtonClicked();
private:
/* 声明一个对象 pushButton */
QPushButton *pushButton;
};
3、连接信号与槽
connect(pushButton, SIGNAL(clicked()), this, SLOT(pushButtonClicked()));
connect(this, SIGNAL(pushButtonTextChanged()), this, SLOT(changeButtonText()));
注意:
发送信号的对象,和接收的信号的对象。因为我们 pushButtonClicked()是本类里定
义的槽,所以用 this 来接收。
四、QT帮助文档
Qt Creator 则不需要帮助文档,在我们安装 Qt 时,帮助文档已经安装在我们的“安装目录
/Qtx.xx.xx/Docs/”下,使用的是 html 文本的方式,我们可以使用浏览器打开这种 html 文本
要想学好 Qt,帮助文档是少看不了的!其实 Qt的帮助文档就是一本十分庞大且非常好的教程了,我们这个教程只是引领大家入门 Qt,引领大家在 Qt 这个非常庞大的文档里学习常用的控件和方法
注:参考正点原子文档
标签:函数,public,connect,信号,linux,MainWindow,Qt From: https://blog.csdn.net/weixin_56905687/article/details/142814852