当前位置: 首页 > article >正文

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

注:参考正点原子文档


http://www.kler.cn/news/342844.html

相关文章:

  • unity ps 2d animation 蛇的制作
  • SQL 自学:表别名的运用与对被联结表使用聚集函数
  • 《C++与简单人工智能算法:开启智能编程之旅》
  • Maven(5)Maven的生命周期是什么?
  • java.util.function Function<T, R>
  • 机器学习中的多模态学习:用C/C++实现高效模型
  • 【SpringBoot详细教程】-11-SpringBoot整合Async 实现异步调用【持续更新】
  • 【Linux】多进程服务器模型(第十九篇)
  • Linux相关概念和易错知识点(14)(进程终止、进程退出、退出信息)
  • Patroni配置文件4-重要规则
  • Java中注解与反射的详细介绍
  • C# 结构体(Struct)
  • 0基础学习CSS(二十二)伪元素
  • 自动化的抖音
  • 算法:反转链表
  • Colorize: 0 variables Colorize is not activated for this file. VsCode
  • 【GeekBand】C++设计模式笔记7_Bridge_桥接模式
  • 惠普电脑怎么开启vt_惠普电脑开启vt虚拟化图文教程(支持新旧bios开启方法)
  • DNS 反向解析导致 ssh 连接缓慢
  • 实战交易策略 篇九:均线止盈策略