zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    常见的java异常——java.lang.IllegalStateException: Ambiguous handler methods mapped for HTTP path
    sqlyong到期后怎么办
    解决Jsp与Java后台之间url传值中文乱码问题
    jsp页面获取当前系统时间
    ajax异步发送时遇到的问题
    Shell 基本运算符
    tcp的半连接与完全连接队列(三)源码分析
    tcp的半连接与完全连接队列(二)
    TCP连接的ISN、连接建立超时及TCP的长短连接
    /proc/sys/net/ipv4/下各参数含义
  • 原文地址:https://www.cnblogs.com/cute/p/2252686.html
Copyright © 2011-2022 走看看