欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 建筑 > QT6 源(74):QT里的基础宏 Q_GADGET ,功能跟 Q_Object 差不多,用于把自定义类接入元对象系统,但不具备信号与槽的功能

QT6 源(74):QT里的基础宏 Q_GADGET ,功能跟 Q_Object 差不多,用于把自定义类接入元对象系统,但不具备信号与槽的功能

2025/5/6 20:31:14 来源:https://blog.csdn.net/zhangzhangkeji/article/details/147689559  浏览:    关键词:QT6 源(74):QT里的基础宏 Q_GADGET ,功能跟 Q_Object 差不多,用于把自定义类接入元对象系统,但不具备信号与槽的功能

(1)本宏定义于头文件 qtmetamacros . h , 一并给出宏 Q_OBJECT 的定义用来对比

/* qmake ignore Q_OBJECT */
//可见本宏定义主要是展开了一些成员函数的声明
#define Q_OBJECT \
public: \QT_WARNING_PUSH \Q_OBJECT_NO_OVERRIDE_WARNING \static  const QMetaObject   staticMetaObject; \virtual const QMetaObject * metaObject() const; \virtual void *qt_metacast(const char *); \virtual int qt_metacall(QMetaObject::Call, int, void **); \QT_TR_FUNCTIONS \
private: \Q_OBJECT_NO_ATTRIBUTES_WARNING \\Q_DECL_HIDDEN_STATIC_METACALL \static void qt_static_metacall(QObject *, QMetaObject::Call, int, void **); \\QT_WARNING_POP \struct QPrivateSignal {}; \QT_ANNOTATE_CLASS(qt_qobject, "")/* qmake ignore Q_OBJECT */
#define Q_OBJECT_FAKE Q_OBJECT QT_ANNOTATE_CLASS(qt_fake, "")/*
QGADGET宏是 Q_OBJECT宏的轻量级版本,
适用于不继承自Q0bject但仍想使用QMeta0bject提供的某些反射功能的类。
就像Q_OBJECT宏一样,它必须出现在类定义的私有部分中。
GADGETS可以有 Q_ENUM、Q_PROPERTY和 Q_INVOKABLE,但它们不能有信号或槽。
Q_GADGET 使得类成员 staticMetaObject可用。
staticMeta0bject是QMetaObject 类型,并提供对使用 Q_ENUMS 声明的枚举的访问。The Q_GADGET macro is a lighter version of the Q_OBJECT macro for classes that
do not inherit from QObject but still want to use some of the
reflection capabilities offered by QMetaObject. Just like the Q_OBJECT macro,
it must appear in the private section of a class definition.
Q_GADGETs can have Q_ENUM, Q_PROPERTY and Q_INVOKABLE,
but they cannot have signals or slots.
Q_GADGET makes a class member, staticMetaObject, available.
staticMetaObject is of type QMetaObject and
provides access to the enums declared with Q_ENUMS. 
*/
#ifndef QT_NO_META_MACROS/* qmake ignore Q_GADGET   英文 GADGET的意思就是小工具*/#define Q_GADGET \public: \static const QMetaObject staticMetaObject; \void qt_check_for_QGADGET_macro(); \typedef void QtGadgetHelper; \private: \QT_WARNING_PUSH \Q_OBJECT_NO_ATTRIBUTES_WARNING \\Q_DECL_HIDDEN_STATIC_METACALL \static void qt_static_metacall(QObject *, QMetaObject::Call, int, void **); \QT_WARNING_POP \QT_ANNOTATE_CLASS(qt_qgadget, "") \/*end*//* qmake ignore Q_NAMESPACE_EXPORT */#define Q_NAMESPACE_EXPORT(...) \extern __VA_ARGS__ const QMetaObject staticMetaObject; \QT_ANNOTATE_CLASS(qt_qnamespace, "") \/*end*//* qmake ignore Q_NAMESPACE */#define Q_NAMESPACE Q_NAMESPACE_EXPORT() \/*end*/
#endif // QT_NO_META_MACROS

(2)

谢谢

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词