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){
    
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值