文章参考:恋恋西风传输
在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){
}