[Development] Why does QFlag exist? (Not QFlags)

Thiago Macieira thiago.macieira at intel.com
Tue Sep 10 18:55:24 CEST 2024


On Tuesday 10 September 2024 06:08:34 GMT-7 Eirik Aavitsland via Development 
wrote:
> > Thank you Aavit. Did already QFlags have the enum_type typedef in this
> > commit?
> > 
> > Another question: did QVariant in this commit already have userType()?
> 
> You're welcome, Thiago!
> No enum_type or userType or similar anywhere in src at this point, no.

Ok, so it looks like this code is legacy based on porting what Qt 3 did, 
before QVariant had the ability to store the enum_type itself. It looks like 
QMetaProperty::write() was kept using int for the Qt 4.x duration:
https://github.com/qt/qt/blob/4.5/src/corelib/kernel/qmetaobject.cpp#L2167-L2183
Note how it converts from the enum's metatype ID to int too.

That code is still there in 5.15:
https://codebrowser.dev/qt5/qtbase/src/corelib/kernel/
qmetaobject.cpp.html#3237

For Qt 6, commit 46f407126ef3e94d59254012cdc34d6a4ad2faf2 changed the 
behaviour:
 - if the input QVariant is a QString and the metatype for the enum does not 
   have an associated meta object, then we pass as int
 - otherwise, we convert to the enum's metatype

Therefore, I conclude that creating ints and passing them to the qt_metacall 
is faulty behaviour we never fixed. That means:
1) I will fix moc to *not* manipulate int for property enum types, which means
   it will not use QFlag at all
2) I will not add QFlag64
3) I will make the QFlags constructor taking QFlag and the QFlag cast operator
   enable_if'ed on sizeof(QFlags) == sizeof(int)
4) I will not mark them or QFlag as deprecated

Any objections?

-- 
Thiago Macieira - thiago.macieira (AT) intel.com
  Principal Engineer - Intel DCAI Platform & System Engineering
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 5152 bytes
Desc: not available
URL: <http://lists.qt-project.org/pipermail/development/attachments/20240910/7b3ed066/attachment.bin>


More information about the Development mailing list