1. 如何声明自定义类型

    如果仅仅在 QVariant 中使用,则仅需要使用 Q_DECLARE_METATYPE 宏进行声明即可。
class Custom_ : public QObject
{
Q_OBJECT
public:
Custom_() {}
virtual ~Custom_() {}
};
//注意:继承 QObject 类型仅支持注册指针类型
Q_DECLARE_METATYPE(Custom_*) class Custom
{
public:
Custom() {}
QString name(){return "custom";}
};
Q_DECLARE_METATYPE(Custom)
  1. 如何在 QVariant 中使用?

    T QVariant::value() const

    void QVariant::setValue(const T &value)

    [static] QVariant QVariant::fromValue(const T &value)
QVariant var;
Custom custom;
var.set<Custom>(custom); QString name = var.value<Custom>().name(); //
auto var = QVariant::fromValue<Custom_*>(new Custom_);
auto custom_ = var.value<Custom_*>();
if(custom_){
//
}

如何需要在信号和槽中使用则需要额外调用 qRegisterMetaType<Custom>("Custom") qRegisterMetaType<Custom_*>("Custom_")进行注册该类型.

使用 Q_DECLARE_METATYPE 宏,不会保证第一时间进行注册该类型,需要调用该函数才会执行 qRegisterMetaType,so 我们需要手动第一时间进行注册该类型。

#ifndef Q_MOC_RUN
#define Q_DECLARE_METATYPE(TYPE) Q_DECLARE_METATYPE_IMPL(TYPE)
#define Q_DECLARE_METATYPE_IMPL(TYPE) \
QT_BEGIN_NAMESPACE \
template <> \
struct QMetaTypeId< TYPE > \
{ \
enum { Defined = 1 }; \
static int qt_metatype_id() \
{ \
static QBasicAtomicInt metatype_id = Q_BASIC_ATOMIC_INITIALIZER(0); \
if (const int id = metatype_id.loadAcquire()) \
return id; \
const int newId = qRegisterMetaType< TYPE >(#TYPE, \
reinterpret_cast< TYPE *>(quintptr(-1))); \
metatype_id.storeRelease(newId); \
return newId; \
} \
}; \
QT_END_NAMESPACE
#endif // Q_MOC_RUN

最新文章

  1. 【JS】javascript 正则表达式 大全 总结
  2. [Quartz笔记]玩转定时调度
  3. eclipse中SSH三大框架环境搭建&lt;二&gt;
  4. Oracle中三种循环(For、While、Loop)
  5. 知方可补不足~SQL中的count命令的一些优化措施(百万以上数据明显)
  6. Android EditText输入最大值提示功能
  7. DSP using MATLAB 示例Example2.4
  8. 修改crontab默认的编辑器
  9. Android_进化史和平台架构介绍
  10. C语言中的getchar和putchar详解
  11. VS2010 Web网站发布详解
  12. MongDB主从复制、复制集
  13. Oracle Pivot学习心得
  14. SecureCRT8.1+SecureCRT_keygen完成注册
  15. 使用isEmpty()报空指针异常
  16. BZOJ 3744 Gty的妹子序列 (分块 + BIT)
  17. ubuntu 14.04 163镜像
  18. node查询mongo
  19. stark组件03
  20. spring面试题 对DI , AOP概念的理解

热门文章

  1. Linux 普通用户自动修改密码
  2. [python 学习] sax
  3. luogu2046 海拔
  4. django之静态文件的设置
  5. pandas.DataFrame.drop_duplicates 用法说明
  6. [转]Html.DropDownList()的用法 ( Asp.Net MVC)
  7. Microsoft SQL Server 简介
  8. 575 div 3 C. Robot Breakout
  9. jmeter之集合点的使用
  10. Python——GUI可视化