• qRegisterMetaType


    qRegisterMetaType<Block>();

    注册类型,并返回id

    去掉Q_DECLARE_METATYPE(Block); 导致错误。但是qRegisterMetaType<Block>(“block”);却可以不加。原因如下:

    template <typename T>
    inline int qRegisterMetaType(

    T * dummy = 0
    )
    {
        return qMetaTypeId(dummy);
    }

    template <typename T>
    inline int qMetaTypeId(
    #ifndef qdoc
        T * /* dummy */ = 0
    #endif
    )
    {
        return QMetaTypeId2<T>::qt_metatype_id();
    }

    -------------------------

    template <typename T>
    struct QMetaTypeId
    {
        enum { Defined = 0 };
    };

    template <typename T>
    struct QMetaTypeId2
    {
        enum { Defined = QMetaTypeId<T>::Defined };
        static inline int qt_metatype_id() { return QMetaTypeId<T>::qt_metatype_id(); }  这个没定义!!
    };

    /opt/QtSDK/Examples/4.7/threads/queuedcustomtype/../../../../Desktop/Qt/474/gcc/include/QtCore/qmetatype.h:169: error: ‘qt_metatype_id’ is not a member of ‘QMetaTypeId<Block>’

    Q_DECLARE_METATYPE(Block); 加入使得qt_metatype_id得到定义。

    #define Q_DECLARE_METATYPE(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 (!metatype_id)                                       \
                        metatype_id = qRegisterMetaType< TYPE >(#TYPE,      \
                                   reinterpret_cast< TYPE *>(quintptr(-1))); \
                    return metatype_id;                                     \
                }                                                           \
        };                                                                  \
        QT_END_NAMESPACE

  • 相关阅读:
    2021.2.28
    《构建之法》11~16章读后感
    《构建之法》6~10章读后感
    《构建之法》1~5章读后感
    4.7 wait notify
    4.8 wait,notify 的正确姿势
    4.9 park&unpark
    4.10 重新理解线程的状态转换
    第七章 Redis-6.2.1脚本安装
    第三十九章 Centos 7 系统优化脚本
  • 原文地址:https://www.cnblogs.com/cute/p/2252686.html
Copyright © 2020-2023  润新知