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

【Qt】02-信号与槽函数

发生的原因与事件

  • 前言
  • 一、什么是信号与槽(Signals and Slots)?
    • 1.1 信号(Signals)
    • 1.2 槽(Slots)
    • 1.3 连接方式
  • 二、调用基本的信号与槽函数
    • 2.1 代码
      • 分析connect()的用法
    • 2.2 结果展示
  • 三、自定义槽函数
    • 3.1 代码
      • released的用法
    • 3.2 现象展示
  • 总结


前言

介绍了QT的信号与槽函数


一、什么是信号与槽(Signals and Slots)?

1.1 信号(Signals)

定义:信号是对象发出的通知,表示某个特定的事件发生了。
例如,当用户点击一个按钮时,按钮对象会发出一个clicked信号。

特点:

  1. 信号是在类中声明的,通常在类的signals部分声明。
  2. 信号的声明类似于普通函数的声明,但不需要实现(即不需要定义函数体)。
  3. 信号的发出是通过emit关键字实现的。例如,emit buttonClicked();。
  4. 信号可以携带参数,这些参数可以传递事件相关的数据。

1.2 槽(Slots)

定义:槽是普通的成员函数,可以被信号触发。当某个信号被发出时,与该信号连接的槽函数会被自动调用。

特点:

  1. 槽函数可以是任何普通的成员函数,也可以是静态函数。
  2. 槽函数的声明和实现与普通成员函数相同。
  3. 槽函数可以被多个信号连接,也可以不被任何信号连接。
  4. 槽函数可以有参数,这些参数必须与连接的信号的参数匹配。

1.3 连接方式

信号和槽之间的连接是通过connect函数实现的。

二、调用基本的信号与槽函数

2.1 代码

其中,不在main函数做任何修改

  • mywidget.cpp
#include "mywidget.h"
#include <QPushButton>

// 构造函数
// 调用基类 QWidget 的构造函数,将 parent 参数传递给它
MyWidget::MyWidget(QWidget *parent)
    : QWidget(parent)
{
    button1.setParent(this);
    button1.setText("colse1");
    button1.move(100,100);

    button2 = new QPushButton(this);        // 指针动态分配空间
    button2->setText("colse2");
    button2->move(300,100);

	// 槽函数
    connect(&button1,&QPushButton::pressed,this,&MyWidget::close);
    connect(button2,&QPushButton::pressed,this,&MyWidget::close);
}
// 析构函数
MyWidget::~MyWidget()
{

}
  • mywidget.h
    在这里插入图片描述
    然后就可以实现两个按键都能关闭界面的功能。

分析connect()的用法

bool QObject::connect(const QObject *sender, const char *signal,
                      const QObject *receiver, const char *member,
                      Qt::ConnectionType type = Qt::AutoConnection);

参数解释:
1.sender:发出信号的对象。【这里有一个值得注意的是,是要传入一个地址类型的】
2.signal:要连接的信号的名称。信号的名称格式为SIGNAL(signalName),其中signalName是信号的名称。
3.receiver:接收信号并调用槽函数的对象。
4.member:要调用的*槽函数的名称*。槽函数的名称格式为SLOT(slotName),其中slotName是槽函数的名称。
5.type:连接类型,可以是Qt::AutoConnection、Qt::DirectConnection、Qt::QueuedConnection等。默认值是Qt::AutoConnection。

在这里插入图片描述

2.2 结果展示

不做展示了,总之就是点击两个按键,界面就被关闭了OuO

三、自定义槽函数

槽函数需要和信号一致(返回值、参数)
由于信号都没有返回值,所以,槽函数一定没有返回值。

3.1 代码

依旧没涉及到的函数不做改变。
mywidget.cpp

#include "mywidget.h"
#include <QPushButton>

MyWidget::MyWidget(QWidget *parent)
    : QWidget(parent)
{
    button1.setParent(this);
    button1.setText("colse1");
    button1.move(100,100);

    button2 = new QPushButton(this);        // 指针动态分配空间
    button2->setText("点击我");
    button2->move(300,100);

    button3 = new QPushButton(this);
    button3->setText("请点击我");
    button3->move(300,128);

    connect(&button1,&QPushButton::pressed,this,&MyWidget::close);
    connect(button2,&QPushButton::released,this,&MyWidget::mySolt);
    // 注意,接受槽的对象变成来button1,点击就会隐藏button1
    connect(button3,&QPushButton::released,&button1,&MyWidget::hide);
}

void MyWidget::mySolt()
{
    button2->setText("hello");
}

// 析构函数
MyWidget::~MyWidget()
{

}

在这里插入图片描述
在这里插入图片描述
mywidget.h

#ifndef MYWIDGET_H
#define MYWIDGET_H

#include <QWidget>
#include <QPushButton>

class MyWidget : public QWidget
{
    Q_OBJECT

public:
    MyWidget(QWidget *parent = 0);
    ~MyWidget();
    void mySolt();
private:
    QPushButton button1;
    QPushButton *button2;       // 指针
    QPushButton *button3;
};

#endif // MYWIDGET_H

在这里插入图片描述

released的用法

也就是抬起按键
在这里插入图片描述

3.2 现象展示

close1(button1)点击后关闭界面。不展示

button2点击之后,改变按键上显示的文字

在这里插入图片描述
button3点击之后,隐藏掉button1。
在这里插入图片描述


总结

这篇文章依旧没有总结


http://www.kler.cn/a/505149.html

相关文章:

  • 全域数据资产管理平台 | SimbaFabric
  • git merge 压缩提交
  • 大模型微调|使用LoRA微调Qwen2.5-7B-Instruct完成文本分类任务
  • Unity|Tetris|俄罗斯方块复刻1(C#)
  • RK3588-NPU pytorch-image-models 模型编译测试
  • cursor重构谷粒商城01——为何要重构谷粒商城
  • 2025开年解读:AI面试 VS 传统面试本质上区别有哪些?
  • Linux网络知识——网络命名空间虚拟网卡
  • 数据结构知识点
  • Java 面试题 - ArrayList 和 LinkedList 的区别,哪个集合是线程安全的?
  • 接口自动化测试难点—数据库验证解决方案
  • HTTP 头部字段的作用
  • HarmonyOS 鸿蒙 ArkTs(5.0.1 13)实现Scroll下拉到顶刷新/上拉触底加载,Scroll滚动到顶部
  • Object类和hashcode方法
  • 链接加载与ATT汇编
  • 【DevOps】Pipeline功能语法
  • 从0到1搭建推荐系统 -- 数据驱动的算法与架构设计(带数据集)
  • 脚本练习3
  • 统计学习算法——逻辑斯谛回归
  • vue3计算属性