前言
使用单例来实现信号的中转
就Qt的信号和槽机制来说,如果存在A>B>C>D的信号传递过程,但是实际上我们不需要BC接受信号,我可以实现一个单例来E来中转变成A>E>D,这样操作后无论有多少级都可以实现只要传递一次即可。
提示:以下是本篇文章正文内容,下面案例可供参考
一、中转类
.h文件
#ifndef TRANSMITSIGNALS_H
#define TRANSMITSIGNALS_H
#include <QObject>
#include<whatplantchoose.h>
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 PlantChooseSin(whatPlantChoose enumValue);
void productSun(int x,int y);
void productWd(int x,int y);
public slots:
};
#endif // TRANSMITSIGNALS_H
.cpp
#include "transmitsignals.h"
//单例类的使用及创建
TransmitSignals::TransmitSignals( )
{
}
TransmitSignals::~TransmitSignals( )
{
}
TransmitSignals& TransmitSignals::GetInstance()
{
static TransmitSignals RobotControl;
return RobotControl;
}
二、用法
将需要绑定的信号绑定上去
connect(this, &ChoosePlant::PlantChooseSin,&TransmitSignals::GetInstance(), &TransmitSignals::PlantChooseSin );
从中转类中取出信号
connect(&TransmitSignals::GetInstance(),&TransmitSignals::PlantChooseSin, this,&Game::dealChoosePlant);