Gui: extend PythonWrapper:
* add methods to wrap/unwrap QDir * add method to load QtUiTools module
This commit is contained in:
@@ -422,8 +422,39 @@ QIcon *PythonWrapper::toQIcon(PyObject *pyobj)
|
||||
return 0;
|
||||
}
|
||||
|
||||
Py::Object PythonWrapper::fromQDir(const QDir& dir)
|
||||
{
|
||||
#if defined (HAVE_SHIBOKEN) && defined(HAVE_PYSIDE)
|
||||
const char* typeName = typeid(dir).name();
|
||||
PyObject* pyobj = Shiboken::Object::newObject(reinterpret_cast<SbkObjectType*>(getPyTypeObjectForTypeName<QDir>()),
|
||||
const_cast<QDir*>(&dir), false, false, typeName);
|
||||
if (pyobj)
|
||||
return Py::asObject(pyobj);
|
||||
#endif
|
||||
throw Py::RuntimeError("Failed to wrap icon");
|
||||
}
|
||||
|
||||
QDir* PythonWrapper::toQDir(PyObject* pyobj)
|
||||
{
|
||||
#if defined (HAVE_SHIBOKEN) && defined(HAVE_PYSIDE)
|
||||
PyTypeObject* type = getPyTypeObjectForTypeName<QDir>();
|
||||
if (type) {
|
||||
if (Shiboken::Object::checkType(pyobj)) {
|
||||
SbkObject* sbkobject = reinterpret_cast<SbkObject*>(pyobj);
|
||||
void* cppobject = Shiboken::Object::cppPointer(sbkobject, type);
|
||||
return reinterpret_cast<QDir*>(cppobject);
|
||||
}
|
||||
}
|
||||
#else
|
||||
Q_UNUSED(pyobj);
|
||||
#endif
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
Py::Object PythonWrapper::fromQObject(QObject* object, const char* className)
|
||||
{
|
||||
if (!object)
|
||||
return Py::None();
|
||||
#if defined (HAVE_SHIBOKEN) && defined(HAVE_PYSIDE)
|
||||
// Access shiboken/PySide via C++
|
||||
//
|
||||
@@ -563,6 +594,21 @@ bool PythonWrapper::loadWidgetsModule()
|
||||
return true;
|
||||
}
|
||||
|
||||
bool PythonWrapper::loadUiToolsModule()
|
||||
{
|
||||
#if defined (HAVE_SHIBOKEN2) && defined(HAVE_PYSIDE2)
|
||||
// QtUiTools
|
||||
static PyTypeObject** SbkPySide2_QtUiToolsTypes = nullptr;
|
||||
if (!SbkPySide2_QtUiToolsTypes) {
|
||||
Shiboken::AutoDecRef requiredModule(Shiboken::Module::import("PySide2.QtUiTools"));
|
||||
if (requiredModule.isNull())
|
||||
return false;
|
||||
SbkPySide2_QtUiToolsTypes = Shiboken::Module::getTypes(requiredModule);
|
||||
}
|
||||
#endif
|
||||
return true;
|
||||
}
|
||||
|
||||
void PythonWrapper::createChildrenNameAttributes(PyObject* root, QObject* object)
|
||||
{
|
||||
Q_FOREACH (QObject* child, object->children()) {
|
||||
|
||||
@@ -35,6 +35,10 @@
|
||||
#include "PropertyPage.h"
|
||||
#include <CXX/Extensions.hxx>
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
class QDir;
|
||||
QT_END_NAMESPACE
|
||||
|
||||
namespace Gui {
|
||||
namespace Dialog{
|
||||
class PreferencePage;
|
||||
@@ -47,6 +51,7 @@ public:
|
||||
bool loadCoreModule();
|
||||
bool loadGuiModule();
|
||||
bool loadWidgetsModule();
|
||||
bool loadUiToolsModule();
|
||||
|
||||
bool toCString(const Py::Object&, std::string&);
|
||||
QObject* toQObject(const Py::Object&);
|
||||
@@ -60,6 +65,8 @@ public:
|
||||
*/
|
||||
Py::Object fromQIcon(const QIcon*);
|
||||
QIcon *toQIcon(PyObject *pyobj);
|
||||
Py::Object fromQDir(const QDir&);
|
||||
QDir* toQDir(PyObject* pyobj);
|
||||
static void createChildrenNameAttributes(PyObject* root, QObject* object);
|
||||
static void setParent(PyObject* pyWdg, QObject* parent);
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user