[Development] changing Q_GADGET
Curtis Mitch
mitch.curtis at theqtcompany.com
Fri Nov 28 12:35:26 CET 2014
> -----Original Message-----
> From: development-bounces+mitch.curtis=theqtcompany.com at qt-project.org
> [mailto:development-bounces+mitch.curtis=theqtcompany.com at qt-project.org]
> On Behalf Of Simon Hausmann
> Sent: Friday, 28 November 2014 12:20 PM
> To: development at qt-project.org
> Subject: [Development] changing Q_GADGET
>
> Hi,
>
> Monsieur Goffart did awesome work in the dev branch on allowing
> structures with
> Q_GADGET to have properties and invokable methods. This brings the macro
> to a
> much wider audience and I'd like to use this opportunity to propose a
> slight
> change to it that may be controversial:
>
> The macros Q_OBJECT and Q_GADGET both - towards the end of their
> definition -
> change the member access permission level to "private". It's always been
> that
> way.
>
> I'd like to propose changing Q_GADGET to not change the access
> permission
> level, so that you can write
>
> struct MyStructure
> {
> Q_PROPERTY(int x MEMBER x)
> Q_GADGET
>
> int x;
> }
>
>
> I feel that Q_GADGET has its primary use with structures and the default
> access level for those is public. I find it awkward that you currently
> have to
> write:
>
> structure MyStructure
> {
> Q_PROPERTY(int x MEMBER X)
> Q_GADGET
> public:
> int x;
> }
>
>
> The proposed change would have two effects:
>
> 1) It makes any existing code that _relies_ on Q_GADGET turning to
> private
> suddenly expose members in structures.
>
> 2) On paper it breaks binary compatibility with MSVC, in the unlikely
> event
> that somebody
> a) produces a DLL and cares about binary compatibility
> b) exposes bare structures
> c) relies on Q_GADGET turning access permission levels to private
>
>
> I feel that the effects are negligible compared to the benefit of a
> better API.
>
> What do you think?
>
>
> Simon
> _______________________________________________
> Development mailing list
> Development at qt-project.org
> http://lists.qt-project.org/mailman/listinfo/development
This sounds quite reasonable to me. I wasn't even aware of this behaviour, and would be quite worried if people were using these macros as access modifiers.
More information about the Development
mailing list