diff options
| -rw-r--r-- | sources/pyside6/libpyside/pysideproperty.cpp | 12 | ||||
| -rw-r--r-- | sources/pyside6/libpyside/pysideproperty_p.h | 9 |
2 files changed, 18 insertions, 3 deletions
diff --git a/sources/pyside6/libpyside/pysideproperty.cpp b/sources/pyside6/libpyside/pysideproperty.cpp index 6525af32c..b7fd55d24 100644 --- a/sources/pyside6/libpyside/pysideproperty.cpp +++ b/sources/pyside6/libpyside/pysideproperty.cpp @@ -237,6 +237,8 @@ static int qpropertyTpInit(PyObject *self, PyObject *args, PyObject *kwds) else pData->doc.clear(); + pData->pyTypeObject = type; + Py_XINCREF(pData->pyTypeObject); pData->typeName = PySide::Signal::getTypeName(type); if (pData->typeName.isEmpty()) @@ -310,9 +312,8 @@ _property_copy(PyObject *old, PyObject *get, PyObject *set, PyObject *reset, PyO auto notify = pData->notify ? pData->notify : Py_None; - PyObject *typeName = String::fromCString(pData->typeName); PyObject *obNew = PyObject_CallFunction(type, const_cast<char *>("OOOOOsO" "bbb" "bbb"), - typeName, get, set, reset, del, doc.data(), notify, + pData->pyTypeObject, get, set, reset, del, doc.data(), notify, pData->designable, pData->scriptable, pData->stored, pData->user, pData->constant, pData->final); @@ -447,7 +448,7 @@ static int qpropertyClear(PyObject *self) Py_CLEAR(data->freset); Py_CLEAR(data->fdel); Py_CLEAR(data->notify); - + Py_XDECREF(data->pyTypeObject); delete data; reinterpret_cast<PySideProperty *>(self)->d = nullptr; @@ -607,5 +608,10 @@ void setTypeName(PySideProperty *self, const char *typeName) self->d->typeName = typeName; } +PyObject *getTypeObject(const PySideProperty *self) +{ + return self->d->pyTypeObject; +} + } //namespace Property } //namespace PySide diff --git a/sources/pyside6/libpyside/pysideproperty_p.h b/sources/pyside6/libpyside/pysideproperty_p.h index 4b6498158..456bf8f6b 100644 --- a/sources/pyside6/libpyside/pysideproperty_p.h +++ b/sources/pyside6/libpyside/pysideproperty_p.h @@ -60,6 +60,9 @@ public: int reset(PyObject *source); QByteArray typeName; + // Type object: A real PyTypeObject ("@Property(int)") or a string + // "@Property('QVariant')". + PyObject *pyTypeObject = nullptr; PyObject *fget = nullptr; PyObject *fset = nullptr; PyObject *freset = nullptr; @@ -184,6 +187,12 @@ bool isConstant(const PySideProperty* self); **/ bool isFinal(const PySideProperty* self); +/// This function returns the type object of the property. It is either a real +/// PyTypeObject ("@Property(int)") or a string "@Property('QVariant')". +/// @param self The property object +/// @return type object +PyObject *getTypeObject(const PySideProperty* self); + } // namespace Property } // namespace PySide |
