aboutsummaryrefslogtreecommitdiffstats
path: root/sources/pyside6/PySide6
diff options
context:
space:
mode:
authorRenato Araujo Oliveira Filho <renato.araujo@kdab.com>2025-04-17 11:20:02 -0300
committerRenato Araujo Oliveira Filho <renato.araujo@kdab.com>2025-04-23 10:12:13 -0300
commitcaa9d339c3ba96879ae5972b08787506ec36d92b (patch)
tree4be4c695f2eff0654ccd1745b5c5a9d4d2320a65 /sources/pyside6/PySide6
parent2f55adcea4b5d058bb600c2f2cc78106c93e10b8 (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.xml2
-rw-r--r--sources/pyside6/PySide6/glue/qtcore.cpp12
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);