[Interest] Better Q_PROPERTY() ?
Fabrice Mousset | GEOCEPT GmbH
fabrice.mousset at geocept.com
Fri Dec 7 08:03:20 CET 2018
Hi all,
I have found a little project which I found very nice to use especially if you want expose you C++ class to QML.
Take a look at this project developed by Thomas Boutroue
http://gitlab.unique-conception.org/qt-qml-tricks/qt-supermacros
and
http://gitlab.unique-conception.org/qt-qml-tricks/qt-qml-models
Here is the link to the Lightning Talk he had at QtWS15 in Berlin.
https://www.youtube.com/watch?v=96XAaH97XYo
I use this tools in my Qt/QML application, and it saves me so much time!
Regards
Fabrice
> -----Ursprüngliche Nachricht-----
> Von: Interest <interest-bounces at lists.qt-project.org> Im Auftrag von Jérôme
> Godbout
> Gesendet: Donnerstag, 6. Dezember 2018 18:50
> An: Konstantin Tokarev <annulen at yandex.ru>; Tomasz Siekierda
> <sierdzio at gmail.com>; sergio.martins at kdab.com
> Cc: Interest at qt-project.org
> Betreff: Re: [Interest] Better Q_PROPERTY() ?
>
> I agree a much simpler macro Q_PROPERTY with a type and an argument
> name would be nice addition Q_PROPERTY_RWN(proptype, arg) -->
> Q_PROPERTY(proptype arg READ arg WRITE setArg NOTIFY argChanged)
> R: for the READ part
> W: for the write part
> N: notify part
> C: constant part
>
> Would need to make all the derivated
> Q_PROPERTY_RWN
> Q_PROPERTY_RC
> Q_PROPERTY_RN
> ...
> That would stream line the naming for most value. Still can use the
> Q_PROPERTY() when something different come along.
>
> For the getter/setter function could have a simple macro but this is tricky if you
> use pimpl or anything else.
> This seem more per people, but not too
>
> -----Original Message-----
> From: Interest <interest-bounces at lists.qt-project.org> On Behalf Of Konstantin
> Tokarev
> Sent: December 6, 2018 11:03 AM
> To: Tomasz Siekierda <sierdzio at gmail.com>; sergio.martins at kdab.com
> Cc: Interest at qt-project.org
> Subject: Re: [Interest] Better Q_PROPERTY() ?
>
>
>
> 05.12.2018, 23:31, "Tomasz Siekierda" <sierdzio at gmail.com>:
> > On Wed, 5 Dec 2018 at 18:23, Sérgio Martins via Interest
> > <interest at lists.qt-project.org> wrote:
> >> On 2018-12-05 16:41, Jason H wrote:
> >> > Epanding to:
> >> > private:
> >> > T _N;
> >> > public:
> >> > T N() { return _N; }
> >> > void setN(T N) { if (_N != N) { M = N; emit NChanged(N); } }
> >> > signal:
> >> > void NChanged(T N);
> >> >
> >> > I know this might sound trivial but if I'm making 5 classes each
> >> with
> >> > 10 properties, that's 1500 lines of boilerplate code that I'm
> >> writing
> >> > (with code style applied).
> >> >
> >> > Is there any way to get closer to my ideal?
> >>
> >> The problem with auto-generated setters is that sometimes you'll
> >> want to
> >> modify them to do additional stuff.
> >
> > Actually, I think this is not a problem at all if we keep current
> > Q_PROPERTY. Then, if you have some special case, you'd use Q_PROPERTY
> > and manually implement getters and setters. If you have a standard
> > case (like most of the
> > time) you'd use
> > the new declaration (like Q_PROPERTY_AUTO or whatever).
> >
> > You could say it's a bit similar to new and old connect() syntax. We
> > don't need to choose one - we can have both.
>
> I'm strongly opposed to autogeneration of getters and setters, because this is
> far from being "standard case", except the most trivial situations, however it
> would be great if it was possible to avoid duplication of property name inside
> Q_PROPERTY for getter, setter and signal, and instead use naming convention
> (property, setProperty, propertyChanged)
>
> >
> >> If you're using QtCreator then Q_PROPERTY will be auto-completed and
> >> you
> >> just need to write the property name.
> >>
> >> Then, right click -> refactor -> "Generate missing Q_PROPERTY members".
> >> (which generates the member bodies in the header file unfortunately,
> >> https://bugreports.qt.io/browse/QTCREATORBUG-14622).
> >>
> >> Maybe we need a "Qt language server", so all other editors would
> >> benefit
> >> from such refactorings.
> >>
> >> Regards,
> >> --
> >> Sérgio Martins | sergio.martins at kdab.com | Senior Software Engineer
> >> Klarälvdalens Datakonsult AB, a KDAB Group company
> >> Tel: Sweden (HQ) +46-563-540090, USA +1-866-777-KDAB(5322)
> >> KDAB - The Qt, C++ and OpenGL Experts
> >> _______________________________________________
> >> Interest mailing list
> >> Interest at lists.qt-project.org
> >> https://lists.qt-project.org/listinfo/interest
> >
> > _______________________________________________
> > Interest mailing list
> > Interest at lists.qt-project.org
> > https://lists.qt-project.org/listinfo/interest
>
> --
> Regards,
> Konstantin
>
> _______________________________________________
> Interest mailing list
> Interest at lists.qt-project.org
> https://lists.qt-project.org/listinfo/interest
> _______________________________________________
> Interest mailing list
> Interest at lists.qt-project.org
> https://lists.qt-project.org/listinfo/interest
More information about the Interest
mailing list