• Q_DECLARE_METATYPE(继承QObject的类都已经自动注册),注册后的类型可以作为QVariant的自定义类型


    简介

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

    示例

      struct MyStruct
      {
          int i;
          ...
      };
    
      Q_DECLARE_METATYPE(MyStruct)

    有命名空间, Q_DECLARE_METATYPE() 宏应该放在命名空间外面

      namespace MyNamespace
      {
          ...
      }
    
      Q_DECLARE_METATYPE(MyNamespace::MyStruct)

    Since MyStruct is now known to QMetaType, it can be used in QVariant:

      MyStruct s;
      QVariant var;
      var.setValue(s); // copy s into the variant
    
      // retrieve the value
      MyStruct s2 = var.value<MyStruct>();

    注意

    一些类型是自动注册的,不在需要用此宏去申明类型

    1. 继承自QObject的指针类型
    2. QList, QVector, QQueue, QStack, QSet or QLinkedList中已经注册的元类型T
    3. QHash < T1, T2 >, QMap< T1, T2 > or QPair< T1, T2 > 中已经注册的元类型T1 T2
    4. QPointer< T >, QSharedPointer< T >, QWeakPointer< T > 继承自QObject的类
    5. Q_ENUM 或 Q_FLAG注册的枚举类型
    6. 包含Q_GADGET macro的类

    http://blog.csdn.net/x356982611/article/details/54292930

  • 相关阅读:
    C#使用System.IO.Path获取文件路径、文件名
    C# 中的await
    深度学习笔记
    单例模式
    hbase的写和读,大合并和小合并
    自定义kafka Sink
    combineByKey
    spark练习题
    sparkonhbase
    HDFS只支持文件append操作, 而依赖HDFS的HBase如何完成增删改查功能
  • 原文地址:https://www.cnblogs.com/findumars/p/6555677.html
Copyright © 2020-2023  润新知