QT单例类在信号槽传输过程中应用场景-不同父窗口的子窗口,不同类对象的子对象。

单例类:即在程序运行的生命周期内,只有一个实例对象。其他地方创建的对象也是第一次创建的对象。

针对信号槽传输过程中存在的多层传输问题,A-D对象, 比较笨的方法就是 A-B-C-D,层层传输。

有了单例类,则可以直接A-单例类-D。

头文件:

#pragma once

#include <QObject>
#include <QVariant>

class qcTransSigSlot  : public QObject
{
	Q_OBJECT

public:
	static qcTransSigSlot* GetInstance();
	static void Release();//释放
	static qcTransSigSlot* signalInstance;
Q_SIGNALS:

	//当按复位按钮时,发送信号出来
	void signalResetStatus();

	//发送错误信息到报警窗口
	void signalErrorInfo(QVariant var);

	void signalReadGProgFile();
    void signalReadGProgFileRes();

private:
	qcTransSigSlot();

};

 cpp文件

#include "qcTransSigSlot.h"

qcTransSigSlot* qcTransSigSlot::signalInstance = nullptr;//初始化对象

qcTransSigSlot::qcTransSigSlot()
{

}

//qcTransSigSlot::~qcTransSigSlot()
//{
//}

qcTransSigSlot* qcTransSigSlot::GetInstance()
{
	//获得单例对象
	if (signalInstance==nullptr)
	{
		signalInstance = new qcTransSigSlot();
	}
	return signalInstance;
}

//释放单例对象
void qcTransSigSlot::Release()//释放
{
	if (signalInstance)
	{
		delete signalInstance;
		signalInstance = nullptr;
	}
}

 在程序的头文件中定义一个宏:将获取实例对象定义为宏

//将单例类对象定义为宏
#define PTRANS_SIGNAL qcTransSigSlot::GetInstance() 

在其他需要用到该对象的地方包含该头文件即可:

cpp1文件:

 //中转信号
     connect(PTRANS_SIGNAL, &qcTransSigSlot::signalReadGProgFile,
         m_pSqlRW, &qcSqlReadWrite::slotReadGCodeFile);
     connect(m_pSqlRW, &qcSqlReadWrite::signalReadGProgFileRes,
         PTRANS_SIGNAL, &qcTransSigSlot::signalReadGProgFileRes);

cpp2中

connect(this, &qcGCodeToBuff::signalReadGProgFile,
		PTRANS_SIGNAL, &qcTransSigSlot::signalReadGProgFile);

	connect(PTRANS_SIGNAL, &qcTransSigSlot::signalReadGProgFileRes,
		this, &qcGCodeToBuff::slotReadGProgFileRes);

只需要在单例类中定义对应信号即可。两个不同的类直接通过这个单例类信号来中转。这样就省去了在不同对象直接的层层传输。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值