[Interest] sharing singleton instance between C++ and QML

Ulf Hermann ulf.hermann at qt.io
Tue Oct 31 18:32:56 CET 2023


> which works fine. Then I wanted to clean the code up a little more, and 
> removed the "public:", given that the above is a `struct`, so everything 
> in it is public anyhow. And that's where it stopped working !

The Q_GADGET macro contains a "private:", just like the Q_OBJECT macro:

#define Q_GADGET_EXPORT(...) \
public: \
     static __VA_ARGS__ 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_GADGET */
#define Q_GADGET Q_GADGET_EXPORT()

> Why isn't the MOC using an actual compiler frontend to analyse these 
> declarations ?

There have been some attempts to modernize moc, but so far the custom 
C++ parser has been the preferred choice. It has the upside of not 
requiring any dependencies and being fairly fast. I'm not an expert in 
that particular area, though.

best regards,
Ulf


More information about the Interest mailing list