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

Stefan Seefeld stefan at seefeld.name
Sat Oct 28 16:29:01 CEST 2023


Oh wow, that's rude !
Thanks !

On Sat, Oct 28, 2023, 09:58 Constantin Makshin <cmakshin at gmail.com> wrote:

> Hi Ulf.
>
> MOC is fine, it's the Q_GADGET 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()
>
> On 10/28/23 00:05, Stefan Seefeld wrote:
> > Hi Uli,
> >
> > thank you for sharing that document, that's indeed very helpful.
> > Following its examples, I was able to set up my singleton such that both
> runtimes (C++, QML) would share the same instance.
> > Doing that I bumped into what I would consider a bug, probably in the
> MOC infrastructure:
> > The example I used was
> >
> > ```
> > struct SingletonForeign
> > {
> >    Q_GADGET
> >    QML_FOREIGN(MySingleton)
> >    QML_SINGLETON
> >    QML_NAMED_ELEMENT(MySingleton)
> > public:
> >    static MySingleton *create(QQmlEngine *, QJSEngine *engine);
> > };
> >
> > ```
> >
> > 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 !
> > I assume this is because the MOC isn't really aware of C++ semantics,
> and for some reason really requires the "public" specifier to be there. Why
> isn't the MOC using an actual compiler frontend to analyse these
> declarations ?
> >
> > Thanks,
> >
> > --
> >
> >        ...ich hab' noch einen Koffer in Berlin...
> >
> >
> > _______________________________________________
> > Interest mailing list
> > Interest at qt-project.org
> > https://lists.qt-project.org/listinfo/interest
> _______________________________________________
> Interest mailing list
> Interest at qt-project.org
> https://lists.qt-project.org/listinfo/interest
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/interest/attachments/20231028/81c42698/attachment.htm>


More information about the Interest mailing list