From 8db678128ea3e8a31e8e172d5e4365b24913d71c Mon Sep 17 00:00:00 2001 From: Ahmad Samir Date: Thu, 4 Jan 2024 12:05:31 +0200 Subject: [PATCH] QObject: clarify docs wrt. member access following Q_OBJECT and co The macros expand to declarations that end in a private: section, which means everything following them is private. As Fabian said in the bug report, this is obvious when Q_OBJECT/GADGET ...etc are used in a class, but might be a bit surprising when used in a `struct`. Fixes: QTBUG-120297 Pick-to: 6.5 6.2 5.15 Change-Id: Iacdfc4eb3bab3554cc1142f682b11b32c3868b8f Reviewed-by: Marc Mutz (cherry picked from commit eb2db79064bd6e74d0b3485a650e4025d0a39c96) Reviewed-by: Qt Cherry-pick Bot (cherry picked from commit 9fb14df81428a23d0fd63f2b532d047bb754c775) --- src/corelib/kernel/qobject.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/corelib/kernel/qobject.cpp b/src/corelib/kernel/qobject.cpp index 56118a20851..27d719519ae 100644 --- a/src/corelib/kernel/qobject.cpp +++ b/src/corelib/kernel/qobject.cpp @@ -4618,6 +4618,13 @@ QDebug operator<<(QDebug dbg, const QObject *o) Q_GADGET or Q_GADGET_EXPORT instead of Q_OBJECT to enable the meta object system's support for enums in a class that is not a QObject subclass. +//! [qobject-macros-private-access-specifier] + \note This macro expansion ends with a \c private: access specifier, which makes member + declarations immediately after the macro private, too. If you want add public (or protected) + members immediately after the macro, you need to use a \c public: (or \c protected:) + access specifier. +//! [qobject-macros-private-access-specifier] + \sa {Meta-Object System}, {Signals and Slots}, {Qt's Property System} */ @@ -4637,6 +4644,8 @@ QDebug operator<<(QDebug dbg, const QObject *o) \c{staticMetaObject} is of type QMetaObject and provides access to the enums declared with Q_ENUM. + \include qobject.cpp qobject-macros-private-access-specifier + \sa Q_GADGET_EXPORT */ @@ -4662,6 +4671,8 @@ QDebug operator<<(QDebug dbg, const QObject *o) ~~~ \endcode + \include qobject.cpp qobject-macros-private-access-specifier + \sa Q_GADGET, {Creating Shared Libraries} */