• Qt笔记之Q_DECLARE_METATYPE(Type)


    首先看一看QVariant这个类,我们可以把它当做一个万能数据类型,需要的时候能转换为一种特定的类型。
    使用canConvert()函数检查是否能转换为你想要的数据类型,结构为:bool QVariant::canConvert() const,返回值为布尔型,为真时表示可以转换相应的类型。
    使用bool QVariant::convert(int targetTypeId)将数据转换为特定类型,返回值为真时表示转换成功。
    要获得数据的值时使用to.T()函数即可,返回一个数值。
    下来看看Qt元类型,QMetaType Class这个类管理元对象系统的类,看了官方的英文文档,我是这样理解的,它可以给一个自定义的类起一个id,然后在创建一个指向自定义类的指针,可以随时随地的动态删除和添加,源码如下:

    
      int id = QMetaType::type("MyClass");
      if (id != QMetaType::UnknownType) {
          void *myClassPtr = QMetaType::create(id);
          ...
          QMetaType::destroy(id, myClassPtr);
          myClassPtr = 0;
      }

    但如果你想使一个自定义的类能够在万能数据类QVariant中使用,就得使用Q_DECLARE_METATYPE(Type)宏进行修饰,其中你的类必须包含该类型必须有公有的 构造、析构、复制构造 函数,如果想在(queued)信号和槽系统中使用或者想在QObject的属性系统中使用,就必须使用qRegisterMetaType()这个函数注册到元对象系统中,这个在qml中调用C++时常用到。

  • 相关阅读:
    C#-项目属性设置
    SQL--连接字符串总结
    希尔排序实现(不太满意)
    选择排序实现
    用位运算实现 | 与 ^ 的功能
    如何初始化一个定长List<T>
    线程池与Threadlocal
    常用类
    基本数据类型介绍
    eclipse快捷键
  • 原文地址:https://www.cnblogs.com/t1029901995/p/7518078.html
Copyright © 2020-2023  润新知