more enum breakage
Phil Thompson
phil at riverbankcomputing.com
Tue Jun 21 15:12:05 BST 2022
On 19/06/2022 17:39, Phil Thompson wrote:
> On 19/06/2022 10:18, Kovid Goyal wrote:
>> On Sun, Jun 19, 2022 at 10:13:09AM +0100, Phil Thompson wrote:
>>> On 19/06/2022 05:02, Kovid Goyal wrote:
>>> > > From the gift that keeps on giving department:
>>> >
>>> > Returning Qt.ItemDataRole.TextAlignmentRole from the data() method of
>>> > models does not work in PyQt6, one has to return an integer not an enum
>>> > for it to work. So, for example:
>>> >
>>> > return Qt.AlignmentFlag.AlignHCenter | Qt.AlignmentFlag.AlignVCenter
>>> >
>>> > results in text rendered by Qt at top left corner, but
>>> >
>>> > return (Qt.AlignmentFlag.AlignHCenter |
>>> > Qt.AlignmentFlag.AlignVCenter).value
>>> >
>>> > works as expected.
>>>
>>> It depends on wether we want the type of the value to be retained by
>>> QVariant. With the current behaviour the following...
>>>
>>> QVariant(Qt.AlignmentFlag.AlignHCenter).value() is
>>> Qt.QAlignmentFlag.QAlignHCenter
>>>
>>> ...is true.
>>>
>>> If QVariant was changed to automatically convert an enum member to an
>>> int
>>> then that type information would be lost. I'm not sure how important
>>> that
>>> is???
>>
>> Well, you could potentially want to get the current value of flags
>> from
>> a model and expect to get an enum as a result not an int. However,
>> unless the model was implemented in Python that would not work anyway,
>> so I dont think its too important. Perhaps you can just document
>> QVariant as not preserving enums through a roundtrip. This is what the
>> C++ version does as well, IIRC.
>
> Thinking about it you should be able to get the int behaviour without
> it needing to be an int. I'll have a play.
Just for the record this seems to be a bug in Qt. v6.2.3 is fine, v6.3.1
isn't.
Phil
More information about the PyQt
mailing list