diff options
| author | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2025-09-26 14:56:39 +0200 |
|---|---|---|
| committer | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2025-10-01 16:04:42 +0200 |
| commit | 60d5a5b05041e05556becbf1ce6efada6e477421 (patch) | |
| tree | 694958029de8b97c03a8a907ff8a3f4c1e649846 /sources/pyside6/libpyside/pyside.cpp | |
| parent | d2f9814c62ee6904cdcbc66c03fdde3f476fa34b (diff) | |
libpyside: Add qobjectType() to return the Python type QObject
Set it directly instead of looking it up via converters, which
is a step towards decoupling the converters from the per-interpreter
types and saves dict lookups.
Task-number: PYSIDE-3155
Change-Id: I31a71d1a9d02f1247e04c57de2c2901746221b4f
Reviewed-by: Cristian Maureira-Fredes <cristian.maureira-fredes@qt.io>
Diffstat (limited to 'sources/pyside6/libpyside/pyside.cpp')
| -rw-r--r-- | sources/pyside6/libpyside/pyside.cpp | 22 |
1 files changed, 15 insertions, 7 deletions
diff --git a/sources/pyside6/libpyside/pyside.cpp b/sources/pyside6/libpyside/pyside.cpp index 4030673a5..ca467c6c1 100644 --- a/sources/pyside6/libpyside/pyside.cpp +++ b/sources/pyside6/libpyside/pyside.cpp @@ -436,7 +436,7 @@ void destroyQCoreApplication() Shiboken::BindingManager &bm = Shiboken::BindingManager::instance(); SbkObject *pyQApp = bm.retrieveWrapper(app); - PyTypeObject *pyQObjectType = Shiboken::Conversions::getPythonTypeObject("QObject*"); + PyTypeObject *pyQObjectType = PySide::qObjectType(); assert(pyQObjectType); void *data[2] = {pyQApp, pyQObjectType}; @@ -507,7 +507,7 @@ const QMetaObject *retrieveMetaObject(PyObject *pyObj) void initQObjectSubType(PyTypeObject *type, PyObject *args, PyObject * /* kwds */) { - PyTypeObject *qObjType = Shiboken::Conversions::getPythonTypeObject("QObject*"); + PyTypeObject *qObjType = PySide::qObjectType(); PyObject *bases = PyTuple_GetItem(args, 1); @@ -1020,18 +1020,26 @@ bool registerInternalQtConf() return isRegistered; } -static PyTypeObject *qobjectType() +static PyTypeObject *qObjType = nullptr; + +PyTypeObject *qObjectType() { - static PyTypeObject * const result = Shiboken::Conversions::getPythonTypeObject("QObject*"); + PyTypeObject *result = qObjType; + Q_ASSERT(result); return result; } +void setQObjectType(PyTypeObject *t) +{ + qObjType = t; +} + bool isQObjectDerived(PyTypeObject *pyType, bool raiseError) { - const bool result = PyType_IsSubtype(pyType, qobjectType()); + const bool result = PyType_IsSubtype(pyType, qObjectType()); if (!result && raiseError) { PyErr_Format(PyExc_TypeError, "A type inherited from %s expected, got %s.", - qobjectType()->tp_name, pyType->tp_name); + qObjectType()->tp_name, pyType->tp_name); } return result; } @@ -1048,7 +1056,7 @@ QObject *convertToQObject(PyObject *object, bool raiseError) return nullptr; auto *sbkObject = reinterpret_cast<SbkObject*>(object); - auto *ptr = Shiboken::Object::cppPointer(sbkObject, qobjectType()); + auto *ptr = Shiboken::Object::cppPointer(sbkObject, qObjectType()); if (ptr == nullptr) { if (raiseError) { PyErr_Format(PyExc_TypeError, "Conversion of %s to QObject failed.", |
