/**************************************************************************** ** ** Copyright (C) 2019 The Qt Company Ltd. ** Copyright (C) 2019 Olivier Goffart ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the QtCore module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser ** General Public License version 3 as published by the Free Software ** Foundation and appearing in the file LICENSE.LGPL3 included in the ** packaging of this file. Please review the following information to ** ensure the GNU Lesser General Public License version 3 requirements ** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. ** ** GNU General Public License Usage ** Alternatively, this file may be used under the terms of the GNU ** General Public License version 2.0 or (at your option) the GNU General ** Public license version 3 or any later version approved by the KDE Free ** Qt Foundation. The licenses are as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 ** included in the packaging of this file. Please review the following ** information to ensure the GNU General Public License requirements will ** be met: https://www.gnu.org/licenses/gpl-2.0.html and ** https://www.gnu.org/licenses/gpl-3.0.html. ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #ifndef QTMETAMACROS_H #define QTMETAMACROS_H #include QT_BEGIN_NAMESPACE #ifndef Q_MOC_OUTPUT_REVISION #define Q_MOC_OUTPUT_REVISION 68 #endif // The following macros can be defined by tools that understand Qt // to have the information from the macro. #ifndef QT_ANNOTATE_CLASS # define QT_ANNOTATE_CLASS(type, ...) #endif #ifndef QT_ANNOTATE_CLASS2 # define QT_ANNOTATE_CLASS2(type, a1, a2) #endif #ifndef QT_ANNOTATE_FUNCTION # define QT_ANNOTATE_FUNCTION(x) #endif #ifndef QT_ANNOTATE_ACCESS_SPECIFIER # define QT_ANNOTATE_ACCESS_SPECIFIER(x) #endif // The following macros are our "extensions" to C++ // They are used, strictly speaking, only by the moc. #ifndef Q_MOC_RUN #ifndef QT_NO_META_MACROS # if defined(QT_NO_KEYWORDS) # define QT_NO_EMIT # else # ifndef QT_NO_SIGNALS_SLOTS_KEYWORDS # define slots Q_SLOTS # define signals Q_SIGNALS # endif # endif # define Q_SLOTS QT_ANNOTATE_ACCESS_SPECIFIER(qt_slot) # define Q_SIGNALS public QT_ANNOTATE_ACCESS_SPECIFIER(qt_signal) # define Q_PRIVATE_SLOT(d, signature) QT_ANNOTATE_CLASS2(qt_private_slot, d, signature) # define Q_EMIT #ifndef QT_NO_EMIT # define emit #endif #ifndef Q_CLASSINFO # define Q_CLASSINFO(name, value) #endif #define Q_PLUGIN_METADATA(x) QT_ANNOTATE_CLASS(qt_plugin_metadata, x) #define Q_INTERFACES(x) QT_ANNOTATE_CLASS(qt_interfaces, x) #define Q_PROPERTY(...) QT_ANNOTATE_CLASS(qt_property, __VA_ARGS__) #define Q_PRIVATE_PROPERTY(d, text) QT_ANNOTATE_CLASS2(qt_private_property, d, text) #ifndef Q_REVISION # define Q_REVISION(...) #endif #define Q_OVERRIDE(text) QT_ANNOTATE_CLASS(qt_override, text) #define QDOC_PROPERTY(text) QT_ANNOTATE_CLASS(qt_qdoc_property, text) #define Q_ENUMS(x) QT_ANNOTATE_CLASS(qt_enums, x) #define Q_FLAGS(x) QT_ANNOTATE_CLASS(qt_enums, x) #define Q_ENUM_IMPL(ENUM) \ friend constexpr const QMetaObject *qt_getEnumMetaObject(ENUM) noexcept { return &staticMetaObject; } \ friend constexpr const char *qt_getEnumName(ENUM) noexcept { return #ENUM; } #define Q_ENUM(x) Q_ENUMS(x) Q_ENUM_IMPL(x) #define Q_FLAG(x) Q_FLAGS(x) Q_ENUM_IMPL(x) #define Q_ENUM_NS_IMPL(ENUM) \ inline constexpr const QMetaObject *qt_getEnumMetaObject(ENUM) noexcept { return &staticMetaObject; } \ inline constexpr const char *qt_getEnumName(ENUM) noexcept { return #ENUM; } #define Q_ENUM_NS(x) Q_ENUMS(x) Q_ENUM_NS_IMPL(x) #define Q_FLAG_NS(x) Q_FLAGS(x) Q_ENUM_NS_IMPL(x) #define Q_SCRIPTABLE QT_ANNOTATE_FUNCTION(qt_scriptable) #define Q_INVOKABLE QT_ANNOTATE_FUNCTION(qt_invokable) #define Q_SIGNAL QT_ANNOTATE_FUNCTION(qt_signal) #define Q_SLOT QT_ANNOTATE_FUNCTION(qt_slot) #define Q_MOC_INCLUDE(...) QT_ANNOTATE_CLASS(qt_moc_include, __VA_ARGS__) #endif // QT_NO_META_MACROS #ifndef QT_NO_TRANSLATION // full set of tr functions # define QT_TR_FUNCTIONS \ static inline QString tr(const char *s, const char *c = nullptr, int n = -1) \ { return staticMetaObject.tr(s, c, n); } #else // inherit the ones from QObject # define QT_TR_FUNCTIONS #endif #ifdef Q_CLANG_QDOC #define QT_TR_FUNCTIONS #endif #if defined(Q_CC_INTEL) // Cannot redefine the visibility of a method in an exported class # define Q_DECL_HIDDEN_STATIC_METACALL #else # define Q_DECL_HIDDEN_STATIC_METACALL Q_DECL_HIDDEN #endif #if defined(Q_CC_CLANG) && Q_CC_CLANG >= 306 # define Q_OBJECT_NO_OVERRIDE_WARNING QT_WARNING_DISABLE_CLANG("-Winconsistent-missing-override") #elif defined(Q_CC_GNU) && !defined(Q_CC_INTEL) && Q_CC_GNU >= 501 # define Q_OBJECT_NO_OVERRIDE_WARNING QT_WARNING_DISABLE_GCC("-Wsuggest-override") #else # define Q_OBJECT_NO_OVERRIDE_WARNING #endif #if defined(Q_CC_GNU) && !defined(Q_CC_INTEL) && Q_CC_GNU >= 600 # define Q_OBJECT_NO_ATTRIBUTES_WARNING QT_WARNING_DISABLE_GCC("-Wattributes") #else # define Q_OBJECT_NO_ATTRIBUTES_WARNING #endif /* 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, "") #ifndef QT_NO_META_MACROS /* qmake ignore Q_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 #else // Q_MOC_RUN #define slots slots #define signals signals #define Q_SLOTS Q_SLOTS #define Q_SIGNALS Q_SIGNALS #define Q_CLASSINFO(name, value) Q_CLASSINFO(name, value) #define Q_INTERFACES(x) Q_INTERFACES(x) #define Q_PROPERTY(text) Q_PROPERTY(text) #define Q_PRIVATE_PROPERTY(d, text) Q_PRIVATE_PROPERTY(d, text) #define Q_PRIVATE_QPROPERTY(accessor, type, name, setter, ...) Q_PRIVATE_QPROPERTY(accessor, type, name, setter, __VA_ARGS__) #define Q_PRIVATE_QPROPERTIES_BEGIN #define Q_PRIVATE_QPROPERTY_IMPL(name) #define Q_PRIVATE_QPROPERTIES_END #define Q_REVISION(...) Q_REVISION(__VA_ARGS__) #define Q_OVERRIDE(text) Q_OVERRIDE(text) #define Q_ENUMS(x) Q_ENUMS(x) #define Q_FLAGS(x) Q_FLAGS(x) #define Q_ENUM(x) Q_ENUM(x) #define Q_FLAGS(x) Q_FLAGS(x) /* qmake ignore Q_OBJECT */ #define Q_OBJECT Q_OBJECT /* qmake ignore Q_OBJECT */ #define Q_OBJECT_FAKE Q_OBJECT_FAKE /* qmake ignore Q_GADGET */ #define Q_GADGET Q_GADGET #define Q_SCRIPTABLE Q_SCRIPTABLE #define Q_INVOKABLE Q_INVOKABLE #define Q_SIGNAL Q_SIGNAL #define Q_SLOT Q_SLOT #endif //Q_MOC_RUN QT_END_NAMESPACE #endif // QTMETAMACROS_H