QT+C++ 中的Q_DECLARE_METATYPE(Type)使用笔记

官方解释:

当自定义一个结构体时,会使用到Q_DECLARE_METATYPE这个宏。
这个宏是为了让QMetaType知道Type这个数据类型,并提供一个默认的拷贝构造函数和析构函数。添加Q_DECLARE_METATYPE()可使所有基于模板的函数(包括QVariant)都知道该类型。
一般把这个宏放在结构体或类的末尾,或者放在一个专用的头文件中,每次在QVariant中使用该类型时都必须包含该文件。

官方例子

典型用例:

struct MyStruct
  {
      int i;
      ...
  };

  Q_DECLARE_METATYPE(MyStruct)

如果MyStruct位于命名空间中,则Q_DECLARE_METATYPE()宏必须位于命名空间之外:

 namespace MyNamespace
  {
      ...
  }

  Q_DECLARE_METATYPE(MyNamespace::MyStruct)

由于MyStruct已经注册,因此可以在QVariant中使用:

MyStruct s;
  QVariant var;
  var.setValue(s); // copy s into the variant

  ...

  // retrieve the value
  MyStruct s2 = var.value<MyStruct>();

使用例子

#ifndef MYTYPE_H
#define MYTYPE_H
#include <QObject>
#include <QMetaType>
class MyType{
    Q_OBJECT
public:
    MyType();
    struct MyStruct
    {
    	int width;
    	int height; 
    };
};
Q_DECLARE_METATYPE(MyType::MyStruct)
#endif // MYTYPE_H
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值