Qt使用Q_DECLARE_INTERFACE Q_INTERFACES宏实现接口类使用qobject_cast进行类型转换

在写抽象类或者接口的时候,肯定是不能继承QObject的
但是又想使用qobject_cast进行类型转换,使用以下办法就能实现


#ifndef FACTORYINTERFACE_H__
#define FACTORYINTERFACE_H__
#include <QObject>
class FactoryInterface{
public:
	FactoryInterface() {};
	virtual ~FactoryInterface() {};

};

QT_BEGIN_NAMESPACE
Q_DECLARE_INTERFACE(FactoryInterface, "DetectionSoftware.Factory.FactoryInterface")//一定是唯一的标识符
QT_END_NAMESPACE

#endif // FACTORYINTERFACE_H__

/*
* 这个抽象类继承自FactoryInterface抽象类
* 
*/

#ifndef FACTORYINTERFACE1_0_H__
#define FACTORYINTERFACE1_0_H__
#include "FactoryInterface.h"

class FactoryInterface1_0: public  FactoryInterface{
public:
	FactoryInterface1_0() {};
	virtual ~FactoryInterface1_0() {};

signals:


public slots:


};

QT_BEGIN_NAMESPACE
Q_DECLARE_INTERFACE(FactoryInterface1_0, "DetectionSoftware.Factory.FactoryInterface1_0")//一定是唯一的标识符
QT_END_NAMESPACE
#endif // FACTORYINTERFACE1_0_H__

#ifndef FACTORYIMPLEMENT1_0_H__
#define FACTORYIMPLEMENT1_0_H__

#include <QObject>
#include "factoryInterface1_0.h"
class FactoryImplement1_0  : public QObject, public FactoryInterface1_0{
	Q_OBJECT
		Q_INTERFACES(FactoryInterface FactoryInterface1_0)

public:
	FactoryImplement1_0(QObject *parent = nullptr);
	~FactoryImplement1_0();
};


#endif // FACTORYIMPLEMENT1_0_H__

直接看代码,重点就是
Q_INTERFACES(FactoryInterface FactoryInterface1_0)
Q_DECLARE_INTERFACE(FactoryInterface1_0, “DetectionSoftware.Factory.FactoryInterface1_0”)//一定是唯一的标识符
这两个宏,具体作用不赘述。

然后使用

	QObject* test = new FactoryImplement1_0();
	FactoryInterface* t = qobject_cast<FactoryInterface*>(test);
	FactoryInterface1_0* tt = qobject_cast<FactoryInterface1_0*>(test);

注意
要想qobject_cast能用,实现类必须使用Q_INTERFACES指定转换的抽象类
只能从QObject类型转为Q_INTERFACES宏指定的抽象类

相关推荐

  1. QT常见数据类型使用

    2024-03-12 23:58:06       19 阅读
  2. wpf 使用DragDrop 进行拖拽和接收

    2024-03-12 23:58:06       9 阅读
  3. 使用Qt进行iOS编程

    2024-03-12 23:58:06       40 阅读
  4. qt数据类型转换

    2024-03-12 23:58:06       11 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-12 23:58:06       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-12 23:58:06       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-12 23:58:06       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-12 23:58:06       20 阅读

热门阅读

  1. 单片机开发-实现Zigbee的LED灯交替闪烁

    2024-03-12 23:58:06       19 阅读
  2. 普通人改变命运的5次机会,你抓住了吗?

    2024-03-12 23:58:06       19 阅读
  3. vue的路由懒加载

    2024-03-12 23:58:06       20 阅读
  4. 【C++】每日一题 86 分隔链表

    2024-03-12 23:58:06       20 阅读
  5. 突破编程_C++_设计模式(迭代模式)

    2024-03-12 23:58:06       21 阅读
  6. 基于单片机的储油罐液位无线监测系统

    2024-03-12 23:58:06       25 阅读
  7. 【C++ 23种设计模式】

    2024-03-12 23:58:06       48 阅读
  8. leetcode 2386. 找出数组的第 K 大和【小根堆】

    2024-03-12 23:58:06       22 阅读
  9. DDR3 NATIVE接口

    2024-03-12 23:58:06       22 阅读