aboutsummaryrefslogtreecommitdiffstats
path: root/sources/pyside6/libpyside/pyside.cpp
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@qt.io>2025-09-26 14:56:39 +0200
committerFriedemann Kleint <Friedemann.Kleint@qt.io>2025-10-01 16:04:42 +0200
commit60d5a5b05041e05556becbf1ce6efada6e477421 (patch)
tree694958029de8b97c03a8a907ff8a3f4c1e649846 /sources/pyside6/libpyside/pyside.cpp
parentd2f9814c62ee6904cdcbc66c03fdde3f476fa34b (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.cpp22
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.",