【linux开发-Qt】-信号与槽机制

一、什么是信号与槽机制

信号(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 这个非常庞大的文档里学习常用的控件和方法

注:参考正点原子文档

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值