Qt信号与槽-思维导图-学习笔记

Qt 信号与槽

在这里插入图片描述

Qt 信号与槽机制

基本概念

  • 信号与槽机制:Qt 编程的基础与创新,使得处理界面组件交互操作更加直观和简单

  • 信号(Signal):在特定情况下被发射的事件,如按钮点击的 clicked() 信号、组合框项变化的 CurrentIndexChanged() 信号

  • 槽(Slot):对信号响应的函数,像普通的 C++ 函数,可以在类的任意部分定义

信号和槽的关联

  • 关联函数:QObject::connect() 用于将信号和槽关联起来

  • QObject::connect(sender, SIGNAL(signal()), receiver, SLOT(slot()));

    • connect()是QObject类的一个静态函数而 QObject是所有Qt类的基类在实际调用时可以忽略前面的限定符,所以可以直接写为

      • connect(sender, SIGNAL(signal()), receiver, SLOT(slot()));
  • 发送者与接收者:sender 是发射信号的对象,receiver 是接收信号的对象

  • 宏:SIGNAL 和 SLOT 是 Qt 的宏,用于指明信号和槽,并将它们的参数转换为字符串

  • 示例

    • 按钮点击发射 clicked() 信号,窗体的 close() 槽函数将被执行

      • QObject::connect(pushButton, SIGNAL(clicked()), MainWindow, SLOT(close()));
    • 一个信号可以连接多个槽

      • connect(pushButton, SIGNAL(clicked()), this, SLOT(hide());
        connect(pushButton, SIGNAL(clicked()), this, SLOT(close());
    • 多个信号可以连接同一个槽

      • connect(pushButton,SIGNAL(clicked()),this,SLOT(close()));
        connect(pushButton_2,SIGNAL(clicked()),this,SLOT(close()));
        connect(pushButton_3,SIGNAL(clicked()),this,SLOT(close()));
    • 一个信号可以连接另外一个信号

      • connect(pushButton, SIGNAL(objectNameChanged(QString)),this, SIGNAL(windowTitelChanged(QString)));

规则

  • 参数一致性:信号与槽的参数个数和类型需一致

  • Q_OBJECT 宏:在使用信号与槽的类中,必须在类的定义中加入 Q_OBJECT 宏

  • 执行顺序:当信号发射时,关联的槽函数按建立连接的顺序依次执行,执行完槽函数后,才会执行发射信号处后面的代码

断开连接

  • 基本方法:disconnect() 用于断开信号与槽的连接

  • bool QObject::disconnect(const QObject *sender, const char *signal, const QObject *receiver, const char *method)

  • 可以断开所有连接、特定信号的连接或与指定接收者的连接

如何在项目里创建信号

新建项目

  • 取消勾选 UI 文件

信号声明

  • mianwindow.h 文件:在该文件中声明信号

  • 无需定义:信号只需要声明,无需定义

具体说明

  • 第17-18行:声明信号 void pushButtonTextChanged();,无需 public 等关键字修饰

如何在项目中创建槽

声明槽

  • 在 mainwindow.h 文件中直接声明槽函数

  • 在 mainwindow.cpp 文件中实现槽函数的定义

  • 声明槽时必须同时提供其定义(即函数体的实现),否则编译器会报错

槽的特点

  • 多种形式:槽可以是类的成员函数、普通全局函数、静态函数

  • 参数和返回值:槽函数的参数和返回值必须与对应的信号一致

添加槽函数后的代码

  • mainwindow.h

  • mainwindow.cpp

信号与槽的匹配

  • 由于信号 void pushButtonTextChanged() 无参数且无返回值,故对应的槽函数也必须是 void 类型且无参数

QPushButton 的重载构造函数

  • QPushButton 类提供了多种构造函数形式,如带文本或图标的构造函数,可以根据需要选择使用

如何在项目中连接信号与槽

连接信号与槽的代码

  • 连接按钮点击信号与槽函数

    • connect(pushButton, SIGNAL(clicked()), this, SLOT(pushButtonClicked()));
  • 连接自定义信号与槽函数

    • connect(this, SIGNAL(pushButtonTextChanged()), this, SLOT(changeButtonText()));

发送信号的对象和接收信号的对象

  • pushButtonClicked() 是在本类中定义的槽函数,所以用 this 来接收

  • pushButtonTextChanged() 是在本类中定义的信号,所以发送者写成 this

  • changeButtonText() 也是本类的槽函数,所以接收槽的对象也是 this

mainwindow.cpp 实现连接信号槽

信号与槽的匹配

  • 信号 clicked() 由 pushButton 触发

  • 槽函数 pushButtonClicked() 处理 clicked() 信号,并发送 pushButtonTextChanged() 信号

  • 信号 pushButtonTextChanged() 触发槽函数 changeButtonText(),该函数改变按钮文本

实现了当按钮被点击时,按钮的文本发生变化的功能

学会使用 Qt 类的信号与槽

Qt 内置信号与槽

  • Qt 提供了大量的内置信号与槽,这些信号与槽已经预定义好,基本满足开发需求

  • 如果内置信号与槽不能满足特定需求,可以按照自定义信号与槽的方法来定义自己的信号和槽

查找信号与槽

  • 在代码中,可以通过 connect 函数来连接信号与槽

  • connect(pushButton, SIGNAL(clicked()), this, SLOT(pushButtonClicked()));

查看信号与槽的定义

  • 在 Qt Creator 中,可以按住 Ctrl 键并点击信号或槽的名称,进入其定义处

  • 在 Qt Creator 中,可以按住 Ctrl 键并点击信号或槽的名称,进入其定义处

使用 Qt 帮助文档

  • 在实际开发中,经常需要使用 Qt 帮助文档来查看 Qt 定义的信号与槽

  • 帮助文档提供了详细的信号与槽信息,包括如何查看和使用这些信号与槽

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

木木不迷茫(˵¯͒¯͒˵)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值