Merge pull request #12059 from 3x380V/pyside6_fixes

Pyside6 fixes
This commit is contained in:
Chris Hennes
2024-01-22 08:03:32 -06:00
committed by GitHub
2 changed files with 31 additions and 74 deletions

View File

@@ -354,6 +354,13 @@ private:
~WrapperManager() override = default;
};
static std::string formatModuleError(std::string name)
{
std::string error = "Cannot load " + name + " module";
PyErr_Print();
return error;
}
template<typename qttype>
Py::Object qt_wrapInstance(qttype object,
const std::string& className,
@@ -363,10 +370,7 @@ Py::Object qt_wrapInstance(qttype object,
{
PyObject* module = PyImport_ImportModule(shiboken.c_str());
if (!module) {
std::string error = "Cannot load ";
error += shiboken;
error += " module";
throw Py::Exception(PyExc_ImportError, error);
throw Py::Exception(PyExc_ImportError, formatModuleError(shiboken));
}
Py::Module mainmod(module, true);
@@ -377,10 +381,7 @@ Py::Object qt_wrapInstance(qttype object,
module = PyImport_ImportModule(pyside.c_str());
if (!module) {
std::string error = "Cannot load ";
error += pyside;
error += " module";
throw Py::Exception(PyExc_ImportError, error);
throw Py::Exception(PyExc_ImportError, formatModuleError(pyside));
}
Py::Module qtmod(module);
@@ -392,10 +393,7 @@ const char* qt_identifyType(QObject* ptr, const std::string& pyside)
{
PyObject* module = PyImport_ImportModule(pyside.c_str());
if (!module) {
std::string error = "Cannot load ";
error += pyside;
error += " module";
throw Py::Exception(PyExc_ImportError, error);
throw Py::Exception(PyExc_ImportError, formatModuleError(pyside));
}
Py::Module qtmod(module);
@@ -415,10 +413,7 @@ void* qt_getCppPointer(const Py::Object& pyobject, const std::string& shiboken,
// https://github.com/PySide/Shiboken/blob/master/shibokenmodule/typesystem_shiboken.xml
PyObject* module = PyImport_ImportModule(shiboken.c_str());
if (!module) {
std::string error = "Cannot load ";
error += shiboken;
error += " module";
throw Py::Exception(PyExc_ImportError, error);
throw Py::Exception(PyExc_ImportError, formatModuleError(shiboken));
}
Py::Module mainmod(module, true);
@@ -452,9 +447,10 @@ PyTypeObject *getPyTypeObjectForTypeName()
}
template<typename qttype>
qttype* qt_getCppType(PyObject* pyobj)
qttype* qt_getCppType(PyObject* pyobj, const std::string& shiboken)
{
#if defined (HAVE_SHIBOKEN) && defined(HAVE_PYSIDE)
Q_UNUSED(shiboken)
PyTypeObject * type = getPyTypeObjectForTypeName<qttype>();
if (type) {
if (Shiboken::Object::checkType(pyobj)) {
@@ -464,7 +460,9 @@ qttype* qt_getCppType(PyObject* pyobj)
}
}
#else
Q_UNUSED(pyobj)
void* ptr = qt_getCppPointer(Py::asObject(pyobj), shiboken, "getCppPointer");
if (ptr)
return reinterpret_cast<qttype*>(ptr);
#endif
return nullptr;
@@ -536,30 +534,12 @@ bool PythonWrapper::toCString(const Py::Object& pyobject, std::string& str)
QObject* PythonWrapper::toQObject(const Py::Object& pyobject)
{
// http://pastebin.com/JByDAF5Z
#if defined (HAVE_SHIBOKEN) && defined(HAVE_PYSIDE)
return qt_getCppType<QObject>(pyobject.ptr());
#else
// Access shiboken/PySide via Python
//
void* ptr = qt_getCppPointer(pyobject, shiboken, "getCppPointer");
return static_cast<QObject*>(ptr);
#endif
return nullptr;
return qt_getCppType<QObject>(pyobject.ptr(), shiboken);
}
QGraphicsItem* PythonWrapper::toQGraphicsItem(PyObject* pyPtr)
{
#if defined (HAVE_SHIBOKEN) && defined(HAVE_PYSIDE)
return qt_getCppType<QGraphicsItem>(pyPtr);
#else
// Access shiboken/PySide via Python
//
void* ptr = qt_getCppPointer(Py::asObject(pyPtr), shiboken, "getCppPointer");
return static_cast<QGraphicsItem*>(ptr);
#endif
return nullptr;
return qt_getCppType<QGraphicsItem>(pyPtr, shiboken);
}
QGraphicsItem* PythonWrapper::toQGraphicsItem(const Py::Object& pyobject)
@@ -569,15 +549,7 @@ QGraphicsItem* PythonWrapper::toQGraphicsItem(const Py::Object& pyobject)
QGraphicsObject* PythonWrapper::toQGraphicsObject(PyObject* pyPtr)
{
#if defined (HAVE_SHIBOKEN) && defined(HAVE_PYSIDE)
return qt_getCppType<QGraphicsObject>(pyPtr);
#else
// Access shiboken/PySide via Python
//
void* ptr = qt_getCppPointer(Py::asObject(pyPtr), shiboken, "getCppPointer");
return reinterpret_cast<QGraphicsObject*>(ptr);
#endif
return nullptr;
return qt_getCppType<QGraphicsObject>(pyPtr, shiboken);
}
QGraphicsObject* PythonWrapper::toQGraphicsObject(const Py::Object& pyobject)
@@ -608,12 +580,7 @@ Py::Object PythonWrapper::fromQImage(const QImage& img)
QImage *PythonWrapper::toQImage(PyObject *pyobj)
{
#if defined (HAVE_SHIBOKEN) && defined(HAVE_PYSIDE)
return qt_getCppType<QImage>(pyobj);
#else
Q_UNUSED(pyobj);
#endif
return nullptr;
return qt_getCppType<QImage>(pyobj, shiboken);
}
Py::Object PythonWrapper::fromQIcon(const QIcon* icon)
@@ -639,12 +606,7 @@ Py::Object PythonWrapper::fromQIcon(const QIcon* icon)
QIcon *PythonWrapper::toQIcon(PyObject *pyobj)
{
#if defined (HAVE_SHIBOKEN) && defined(HAVE_PYSIDE)
return qt_getCppType<QIcon>(pyobj);
#else
Q_UNUSED(pyobj);
#endif
return nullptr;
return qt_getCppType<QIcon>(pyobj, shiboken);
}
Py::Object PythonWrapper::fromQDir(const QDir& dir)
@@ -668,12 +630,7 @@ Py::Object PythonWrapper::fromQDir(const QDir& dir)
QDir* PythonWrapper::toQDir(PyObject* pyobj)
{
#if defined (HAVE_SHIBOKEN) && defined(HAVE_PYSIDE)
return qt_getCppType<QDir>(pyobj);
#else
Q_UNUSED(pyobj);
#endif
return nullptr;
return qt_getCppType<QDir>(pyobj, shiboken);
}
Py::Object PythonWrapper::fromQPrinter(QPrinter* printer)