aboutsummaryrefslogtreecommitdiffstats
path: root/sources/pyside6
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@qt.io>2020-11-14 11:02:39 +0100
committerFriedemann Kleint <Friedemann.Kleint@qt.io>2020-11-16 07:27:57 +0000
commitb0671e075e6143bb590d069a9848bc163194b7ef (patch)
treeb0c2cbc45dab4eb63ddc13bde565a279a8bece28 /sources/pyside6
parentdff115603e6f093f9189977e29511b53a16ec0c6 (diff)
PySide6: Add QMetaType
This is required for QSqlField among other things. Re-add the conversions that previously existed for the now deprecated QVariant::Type for QMetaType. Change-Id: If47168f0f45ecfbfe483a8eaa9c6e037477f5ce6 Reviewed-by: Christian Tismer <tismer@stackless.com>
Diffstat (limited to 'sources/pyside6')
-rw-r--r--sources/pyside6/PySide6/QtCore/CMakeLists.txt1
-rw-r--r--sources/pyside6/PySide6/QtCore/typesystem_core_common.xml11
-rw-r--r--sources/pyside6/PySide6/glue/qtcore.cpp20
-rw-r--r--sources/pyside6/tests/QtSql/qvarianttype_test.py19
4 files changed, 41 insertions, 10 deletions
diff --git a/sources/pyside6/PySide6/QtCore/CMakeLists.txt b/sources/pyside6/PySide6/QtCore/CMakeLists.txt
index 6168055d3..df332da58 100644
--- a/sources/pyside6/PySide6/QtCore/CMakeLists.txt
+++ b/sources/pyside6/PySide6/QtCore/CMakeLists.txt
@@ -91,6 +91,7 @@ ${QtCore_GEN_DIR}/qmetamethod_wrapper.cpp
${QtCore_GEN_DIR}/qmetaobject_connection_wrapper.cpp
${QtCore_GEN_DIR}/qmetaobject_wrapper.cpp
${QtCore_GEN_DIR}/qmetaproperty_wrapper.cpp
+${QtCore_GEN_DIR}/qmetatype_wrapper.cpp
${QtCore_GEN_DIR}/qmimedata_wrapper.cpp
${QtCore_GEN_DIR}/qmimedatabase_wrapper.cpp
${QtCore_GEN_DIR}/qmimetype_wrapper.cpp
diff --git a/sources/pyside6/PySide6/QtCore/typesystem_core_common.xml b/sources/pyside6/PySide6/QtCore/typesystem_core_common.xml
index 84048bda3..2f8ce57b4 100644
--- a/sources/pyside6/PySide6/QtCore/typesystem_core_common.xml
+++ b/sources/pyside6/PySide6/QtCore/typesystem_core_common.xml
@@ -352,6 +352,17 @@
</conversion-rule>
</primitive-type>
+ <value-type name="QMetaType">
+ <enum-type name="Type"/>
+ <enum-type name="TypeFlag" flags="TypeFlags"/>
+ <conversion-rule>
+ <native-to-target file="../glue/qtcore.cpp" snippet="conversion-qmetatype-pytypeobject"/>
+ <target-to-native>
+ <add-conversion type="PyTypeObject" file="../glue/qtcore.cpp" snippet="conversion-pytypeobject-qmetatype"/>
+ </target-to-native>
+ </conversion-rule>
+ </value-type>
+
<primitive-type name="QModelIndexList">
<include file-name="qabstractitemmodel.h" location="global"/>
<conversion-rule>
diff --git a/sources/pyside6/PySide6/glue/qtcore.cpp b/sources/pyside6/PySide6/glue/qtcore.cpp
index 3e3d0238e..354dfa389 100644
--- a/sources/pyside6/PySide6/glue/qtcore.cpp
+++ b/sources/pyside6/PySide6/glue/qtcore.cpp
@@ -119,6 +119,26 @@ else {
// @snippet qsettings-value
+// @snippet conversion-pytypeobject-qmetatype
+if (Shiboken::String::checkType(reinterpret_cast<PyTypeObject *>(%in)))
+ %out = QMetaType(QMetaType::QString);
+else if (%in == reinterpret_cast<PyObject *>(&PyFloat_Type))
+ %out = QMetaType(QMetaType::Double);
+else if (%in == reinterpret_cast<PyObject *>(&PyLong_Type))
+ %out = QMetaType(QMetaType::Int);
+else if (Py_TYPE(%in) == SbkObjectType_TypeF())
+ %out = QMetaType::fromName(Shiboken::ObjectType::getOriginalName((SbkObjectType *)%in));
+else
+ %out = QMetaType::fromName(reinterpret_cast<PyTypeObject *>(%in)->tp_name);
+// @snippet conversion-pytypeobject-qmetatype
+
+// @snippet conversion-qmetatype-pytypeobject
+auto pyType = Shiboken::Conversions::getPythonTypeObject(%in.name());
+%out = pyType ? (reinterpret_cast<PyObject *>(pyType)) : Py_None;
+Py_INCREF(%out);
+return %out;
+// @snippet conversion-qmetatype-pytypeobject
+
// @snippet qvariant-conversion
static QMetaType QVariant_resolveMetaType(PyTypeObject *type)
{
diff --git a/sources/pyside6/tests/QtSql/qvarianttype_test.py b/sources/pyside6/tests/QtSql/qvarianttype_test.py
index f2a3cb538..a15cc9504 100644
--- a/sources/pyside6/tests/QtSql/qvarianttype_test.py
+++ b/sources/pyside6/tests/QtSql/qvarianttype_test.py
@@ -35,27 +35,26 @@ sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
from init_paths import init_test_paths
init_test_paths(False)
+from PySide6.QtCore import QMetaType
from PySide6.QtSql import QSqlField
class QVariantTypeTest(unittest.TestCase):
def testQVariantType(self):
- f = QSqlField("name", str)
- self.assertEqual(f.type(), str)
+ f = QSqlField("name", QMetaType(QMetaType.QString))
+ self.assertEqual(f.metaType().id(), QMetaType.QString)
- f = QSqlField("name", "QString")
- self.assertEqual(f.type(), str)
+ f = QSqlField("name", QMetaType.fromName(b"QString"))
+ self.assertEqual(f.metaType().id(), QMetaType.QString)
- f = QSqlField("name", "double")
- self.assertEqual(f.type(), float)
+ f = QSqlField("name", QMetaType.fromName(b"double"))
+ self.assertEqual(f.metaType(), float)
f = QSqlField("name", float)
- self.assertEqual(f.type(), float)
+ self.assertEqual(f.metaType(), float)
f = QSqlField("name", int)
- self.assertEqual(f.type(), int)
+ self.assertEqual(f.metaType(), int)
- f = QSqlField("name", None)
- self.assertEqual(f.type(), None)
if __name__ == '__main__':
unittest.main()