创作不易,本篇文章如果帮助到了你,还请点赞 关注支持一下♡>𖥦<)!!
主页专栏有更多知识,如有疑问欢迎大家指正讨论,共同进步!
🔥c++系列专栏:C/C++零基础到精通 🔥给大家跳段街舞感谢支持!ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ
c语言内容💖:
专栏:c语言之路重点知识整合
信号和槽机制的原理
信号是一个事件的发生,槽函数则是对这个事件的响应
信号和槽可以看作是观察者模式,当一个对象内部发生变化,发出信号后,其他对象可以通过 connect
连接这个信号,用于接收通知,并定义一个槽函数对发出的信号做出响应
信号和槽的使用步骤
包含 <QObject>
头文件,传输数据的两个类继承于 QObject
-
- 在类的声明中,使用
signals
关键字来声明信号(不必实现函数体)
- 在类的声明中,使用
- 2.在需要发送信号(数据)的地方使用
Q_EMIT
发送信号 - 3.在接收数据的类中声明和定义槽函数,信号和槽函数的返回值和参数需要完全相同
- 4.在接受数据的类中使用
connect
函数连接信号和槽
示例:
发送数据类:
//Sender.h
#include <QObject>
#include <QDebug>
class Sender : public QObject
{
Q_OBJECT
signals:
//声明信号
void sendMessage(QString message);
private:
Sender sender;
};
//Sender.cpp
void send()
{
//发送信号
Q_EMIT sendMessage("TianXi Studio");
}
接收数据类:
//Receiver.h
#include <QObject>
#include <QDebug>
class Receiver : public QObject
{
Q_OBJECT
public slots:
void receiveMessage(QString message)
{
qDebug() << "Received message: " << message;
}
private:
Sender* sender;
};
//Receiver.cpp
Receiver::Receiver(QObject *parent) : QObject(parent)
{
//构造函数
//链接信号和槽
QObject::connect(sender, SIGNAL(sendMessage(QString)), this, SLOT(receiveMessage(QString)));
}
//槽函数
receiveMessage(message);
信号和槽的优点
- 1.实现了类之间的数据通信
- 2.实现了对象之间的松散耦合,易于维护和扩展
- 3.信号和槽机制容易扩展,实现自定义的通信机制
信号和槽可以一对一 、一对多和多对一
大家的点赞、收藏、关注将是我更新的最大动力! 欢迎留言或私信建议或问题。 |
大家的支持和反馈对我来说意义重大,我会继续不断努力提供有价值的内容!如果本文哪里有错误的地方还请大家多多指出(●'◡'●) |