QT的qRegisterMetaType和qRegisterMetaType

以下只为自己的问题做个记录
参考理解
qRegisterMetaType使用方法如下:
1、注册位置:在第一次使用此类链接跨线程的signal/slot之前,一般在当前类的构造函数中进行注册;
2、注册方法:在当前类的顶部包含:#include ,构造函数中加入代码:qRegisterMetaType(“Myclass”);
3、Myclass的引用类型需单独注册:qRegisterMetaType(“Myclass&”);

Q_DECLARE_METATYPE
1、这个宏用来注册一个类(含默认构造、默认析构、拷贝构造函数)为QMetaType类型 ,注册后的类型可以作为QVariant的自定义类型。
2、这个宏应该放在类或者结构体外面的下面,也可以放在一个非公用引用的头文件里,在每次使用QVariant的时候引用该头文件。
3、 想在信号队列、槽、 QObject’s property system中使用该类型,还得用qRegisterMetaType()注册该类型。

在查看一份代码中,多线程中使用了一个自定义类,自定义的一个类用Q_DECLARE_METATYPE进行了声明

Q_DECLARE_METATYPE(class*)

声明后在绑定该类的信号和槽之前使用qRegisterMetaType进行注册

qRegisterMetaType<qintptr>("qintptr");

因为该类是继承自QObject,然后在传递时该类指针又传递到其它地方使用,猜测其使用Q_DECLARE_METATYPE原因是因为后面使用到static_cast<class *>()进行转换,而使用qRegisterMetaType原因是因为该类的槽中包含qintptr,而qintptr可能不能直接在信号和槽中传递

  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值