[Development] changing Q_GADGET
Simon Hausmann
simon.hausmann at theqtcompany.com
Fri Nov 28 12:19:45 CET 2014
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
More information about the Development
mailing list