QT开发中的信号中转类

文章参考:恋恋西风传输

在QT开发中,多层类或者多层嵌套类之间信号传递,可以使用信号中转类,可以使无论多少层嵌套实际只有两层之间传递

一、需求

在多层嵌套类或者界面,能够快速传递信号,只需要写一个信号与接受的槽函数,可完成信号传递,槽接收到信号。

二、解决方案

写一个中转类,中专类为单例设计模式

对于子类,将发送中转类中的信号,接收类接收信号触发槽函数

实际最少可以只写一个connect一个信号一个触发的槽函数

三、代码
中转类
#ifndef TRANSMITSIGNALS_H
#define TRANSMITSIGNALS_H
#include <QObject>

class TransmitSignals : public QObject
{
    Q_OBJECT
public:
    static TransmitSignals &GetInstance();
private:
    TransmitSignals();
    ~TransmitSignals();

    //禁止拷贝构造
    TransmitSignals(const TransmitSignals&)=delete;
    TransmitSignals(const TransmitSignals&&)=delete;
    //禁止重载=号
    TransmitSignals &operator=(const TransmitSignals &)=delete;

signals:
    //子类需要发送的信号
    void sig_test(int _num);
};

#endif // TRANSMITSIGNALS_H
#include "transmitsignals.h"
#include "QDebug"

TransmitSignals::TransmitSignals()
{

}

TransmitSignals::~TransmitSignals(){

}

TransmitSignals& TransmitSignals::GetInstance(){

    //静态局部变量,在程序运行周期一直存在,不会被销毁
    static TransmitSignals ro;
    qDebug()<<"ro:"<<&ro;
    return ro;
}
子类(发送信号)
#include "transmitsignals.h"

void fun{
    //发送信号
	emit TransmitSignals::GetInstance().sig_test(true);
}
接收类(触发槽函数)
#include "transmisignal.h"

//需要先连接
connect(&TransmitSignals::GetInstance(),SIGNAL(sig_test(int)),this,SLOT(receive_sig_test(int)));

//槽函数
void classname::receive_sig_test(int num){
    
}
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
QT信号和槽(Signals and Slots)是一种用于实现对象之间通信的机制。通过信号和槽机制,可以将一个对象的动作或状态变化传递给其他对象进行相应的处理。以下是QT使用信号和槽的程序开发流程: 1. 定义信号和槽: - 在需要发送信号,使用`signals`关键字声明信号,并定义信号的参数列表。例如:`signals: void mySignal(int value);` - 在需要接收信号,使用`slots`关键字声明槽函数,并定义槽函数的参数列表和返回值型。例如:`public slots: void mySlot(int value);` 2. 连接信号和槽: - 在需要连接信号和槽的地方,使用`connect`函数进行连接。例如:`connect(sender, SIGNAL(mySignal(int)), receiver, SLOT(mySlot(int)));` - `sender`表示发送信号的对象,`SIGNAL(mySignal(int))`表示发送的信号,`receiver`表示接收信号的对象,`SLOT(mySlot(int))`表示接收的槽函数。 3. 发射信号: - 在发送信号的地方,通过调用`emit`关键字加上信号名和参数列表来发射信号。例如:`emit mySignal(value);` 4. 槽函数处理: - 当信号被发射时,与之连接的槽函数会被自动调用,并将信号的参数传递给槽函数进行处理。 需要注意的是,信号和槽的连接可以在任何地方进行,但通常会在对象的构造函数或初始化函数进行连接。 通过使用信号和槽机制,可以实现对象之间的灵活通信,从而实现事件的处理、界面更新、数据传递等功能。这种机制在QT被广泛应用,可以提高程序的可维护性和扩展性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值