Qt学习之 - 信号槽

Qt 的信号槽机制是 Qt 框架的核心特性之一,它是一种用于对象间通信的机制。信号槽机制取代了传统的回调函数,提供了更灵活、更安全的方式来处理事件和对象之间的交互。

一、 信号槽机制的基本概念

语法:connect(sender, signal, receiver, slot);

  • sender:信号发送者
  • signal:信号
  • receiver:信号接收者
  • slot:接收对象在接收到信号之后所需要调用的函数(槽函数)

1. 信号(Signal)

  • 信号是 Qt 中对象发出的一种通知,用于表示某种事件的发生。
  • 信号是一个函数声明,但没有实现(类似于接口)。
  • 例如,按钮被点击时,QPushButton 会发出 clicked() 信号,也可以手动触发。

2. 槽(Slot)

  • 槽是一个普通的成员函数,用于响应信号。
  • 槽可以有参数,也可以没有参数。
  • 槽可以被直接调用,也可以通过信号触发。

3. 连接(Connect)

  • 使用 QObject::connect() 函数将信号与槽连接起来。

  • 当信号发出时,连接的槽函数会被自动调用。

  • 语法:

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

    或者使用 Qt5 的新语法:

    QObject::connect(sender, &SenderClass::signal, receiver, &ReceiverClass::slot);
    

一句话概括就是:的什么东西作用在哪里,比如:你用手打他的脸就是 QObject::connect(你,手,他,脸);


二、 声明与使用

示例代码:

#include <QApplication>
#include <QPushButton>
#include <QObject>
#include <QDebug>

class Example : public QObject {
   
   
    Q_OBJECT

public slots:
    void handleClick() {
   
   
        qDebug() << "Button clicked!";
    }
};

int main(int argc, char *argv[]) {
   
   
    QApplication app(argc, argv);

    QPushButton button("Click Me");
    Example example;

    QObject::connect(&button, &QPushButton::clicked, &example, &Example::handleClick);

    button.show();
    return app.exec();
}

上面代码示例作用是点击按钮会触发Example 类中的handleClick方法,执行并打印 “Button clicked!”

Qt中的信号槽分为系统控件自带的和我们自定义的,一般都是使用系统控件自带的,如果我们想要看一个控件他自带的信号槽有哪些,该怎么办呢,可以通过以下几种方法查找:

1. 系统自带的信号槽


1.1 在代码中选中控件类名(如 QPushButton),按 F1 键即可打开帮助文档。

在这里插入图片描述

在这里插入图片描述


1.2 或者选中类直接点击去,找到Q_SLOTSQ_SIGNALS 两部分

在这里插入图片描述


1.3 使用 Qt Designer,将控件拖入设计器。右键控件,选择 “转到槽…” 来查看常见槽。

在这里插入图片描述

2. 自定义信号槽

2.1 自定义信号

自定义信号需要使用 signals 关键字声明。注意:信号只需声明,不需要实现。

头文件声明

class CustomWidget : public QWidget {
   
   
    Q_OBJECT

public:
    explicit CustomWidget(QWidget *parent = nullptr);

signals:
    void customSignal(int value);
};
2.2 自定义槽

槽函数是普通成员函数,需要用 slots 关键字声明。

头文件


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值