diff options
author | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2020-11-14 11:02:39 +0100 |
---|---|---|
committer | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2020-11-16 07:27:57 +0000 |
commit | b0671e075e6143bb590d069a9848bc163194b7ef (patch) | |
tree | b0c2cbc45dab4eb63ddc13bde565a279a8bece28 /sources/pyside6 | |
parent | dff115603e6f093f9189977e29511b53a16ec0c6 (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.txt | 1 | ||||
-rw-r--r-- | sources/pyside6/PySide6/QtCore/typesystem_core_common.xml | 11 | ||||
-rw-r--r-- | sources/pyside6/PySide6/glue/qtcore.cpp | 20 | ||||
-rw-r--r-- | sources/pyside6/tests/QtSql/qvarianttype_test.py | 19 |
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() |