diff options
| author | Renato Araujo Oliveira Filho <renato.araujo@kdab.com> | 2025-04-17 11:20:02 -0300 |
|---|---|---|
| committer | Renato Araujo Oliveira Filho <renato.araujo@kdab.com> | 2025-04-23 10:12:13 -0300 |
| commit | caa9d339c3ba96879ae5972b08787506ec36d92b (patch) | |
| tree | 4be4c695f2eff0654ccd1745b5c5a9d4d2320a65 /sources/pyside6/PySide6 | |
| parent | 2f55adcea4b5d058bb600c2f2cc78106c93e10b8 (diff) | |
Fix QMetaEnum conversions into QVariant
Make sure to store QtEnums in QVariant when the enum has a metatype.
Fixes: PYSIDE-3084
Change-Id: I94b89f89e6fb3c58560325f2a6843a5260d86557
Reviewed-by: Cristian Maureira-Fredes <cristian.maureira-fredes@qt.io>
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
Diffstat (limited to 'sources/pyside6/PySide6')
| -rw-r--r-- | sources/pyside6/PySide6/QtCore/typesystem_core_common.xml | 2 | ||||
| -rw-r--r-- | sources/pyside6/PySide6/glue/qtcore.cpp | 12 |
2 files changed, 13 insertions, 1 deletions
diff --git a/sources/pyside6/PySide6/QtCore/typesystem_core_common.xml b/sources/pyside6/PySide6/QtCore/typesystem_core_common.xml index 406445a8f..9390f8412 100644 --- a/sources/pyside6/PySide6/QtCore/typesystem_core_common.xml +++ b/sources/pyside6/PySide6/QtCore/typesystem_core_common.xml @@ -318,6 +318,7 @@ <primitive-type name="QVariant" target-lang-api-name="PyObject"> <extra-includes> <include file-name="optional" location="global"/> + <include file-name="pysideqenum.h" location="global"/> </extra-includes> <conversion-rule> <native-to-target file="../glue/qtcore.cpp" snippet="return-qvariant"/> @@ -328,6 +329,7 @@ <add-conversion type="QByteArray" file="../glue/qtcore.cpp" snippet="conversion-qbytearray"/> <add-conversion type="PyFloat" check="PyFloat_CheckExact(%in)" file="../glue/qtcore.cpp" snippet="conversion-pyfloat"/> <add-conversion type="PyLong" check="PyLong_CheckExact(%in)" file="../glue/qtcore.cpp" snippet="conversion-qlonglong"/> + <add-conversion type="SbkEnumType" check="Shiboken::Enum::check(%in)" file="../glue/qtcore.cpp" snippet="conversion-sbkobject"/> <add-conversion type="SbkObject" file="../glue/qtcore.cpp" snippet="conversion-sbkobject"/> <add-conversion type="PyDict" check="PyDict_CheckExact(%in)" file="../glue/qtcore.cpp" snippet="conversion-pydict"/> <add-conversion type="PyList" check="PyList_Check(%in)" file="../glue/qtcore.cpp" snippet="conversion-pylist"/> diff --git a/sources/pyside6/PySide6/glue/qtcore.cpp b/sources/pyside6/PySide6/glue/qtcore.cpp index 449226d6d..2708bfeda 100644 --- a/sources/pyside6/PySide6/glue/qtcore.cpp +++ b/sources/pyside6/PySide6/glue/qtcore.cpp @@ -1535,7 +1535,17 @@ double in = %CONVERTTOCPP[double](%in); // @snippet conversion-sbkobject // a class supported by QVariant? -const QMetaType metaType = QVariant_resolveMetaType(Py_TYPE(%in)); +QMetaType metaType; +if (Shiboken::Enum::check(%in)) +{ + const auto baseType = PyObject_Type(%in); + const auto typeName = PySide::QEnum::getTypeName(Py_TYPE(%in)); + if (!typeName.isEmpty()) + metaType = QMetaType::fromName(typeName); +} +if (!metaType.isValid()) + metaType = QVariant_resolveMetaType(Py_TYPE(%in)); + bool ok = false; if (metaType.isValid()) { QVariant var(metaType); |
