Created uiloader plugin used to register new types before QUiLoader.
This is used to register a new python type which can be used in ui description files.
Reviewer: Hugo Parente Lima <hugo.pl@gmail.com>
Luciano Wolf <luciano.wolf@openbossa.org>
This commit is contained in:
parent
83533ddc5d
commit
24cbdd8dfa
10 changed files with 401 additions and 0 deletions
|
|
@ -181,6 +181,7 @@ set(GENERATOR_EXTRA_FLAGS --generatorSet=shiboken --enable-parent-ctor-heuristic
|
||||||
enable_testing()
|
enable_testing()
|
||||||
|
|
||||||
add_subdirectory(libpyside)
|
add_subdirectory(libpyside)
|
||||||
|
add_subdirectory(plugins)
|
||||||
# project directories
|
# project directories
|
||||||
add_subdirectory(PySide)
|
add_subdirectory(PySide)
|
||||||
add_subdirectory(tests)
|
add_subdirectory(tests)
|
||||||
|
|
|
||||||
|
|
@ -172,6 +172,7 @@ if (NOT QT_QTDECLARATIVE_FOUND AND ${QTVERSION} VERSION_GREATER 4.6.0)
|
||||||
endif()
|
endif()
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
|
|
||||||
HAS_QT_MODULE(QT_QTCORE_FOUND QtCore)
|
HAS_QT_MODULE(QT_QTCORE_FOUND QtCore)
|
||||||
HAS_QT_MODULE(QT_QTGUI_FOUND QtGui)
|
HAS_QT_MODULE(QT_QTGUI_FOUND QtGui)
|
||||||
HAS_QT_MODULE(QT_QTNETWORK_FOUND QtNetwork)
|
HAS_QT_MODULE(QT_QTNETWORK_FOUND QtNetwork)
|
||||||
|
|
|
||||||
|
|
@ -10,18 +10,22 @@ set(QtUiTools_include_dirs ${CMAKE_CURRENT_SOURCE_DIR}
|
||||||
${QT_QTCORE_INCLUDE_DIR}
|
${QT_QTCORE_INCLUDE_DIR}
|
||||||
${QT_QTGUI_INCLUDE_DIR}
|
${QT_QTGUI_INCLUDE_DIR}
|
||||||
${QT_QTXML_INCLUDE_DIR}
|
${QT_QTXML_INCLUDE_DIR}
|
||||||
|
${QT_QTDESIGNER_INCLUDE_DIR}
|
||||||
${QT_QTUITOOLS_INCLUDE_DIR}
|
${QT_QTUITOOLS_INCLUDE_DIR}
|
||||||
${PYTHON_INCLUDE_PATH}
|
${PYTHON_INCLUDE_PATH}
|
||||||
${SHIBOKEN_INCLUDE_DIR}
|
${SHIBOKEN_INCLUDE_DIR}
|
||||||
${libpyside_SOURCE_DIR}
|
${libpyside_SOURCE_DIR}
|
||||||
|
${plugins_SOURCE_DIR}
|
||||||
${QtCore_BINARY_DIR}/PySide/QtCore/
|
${QtCore_BINARY_DIR}/PySide/QtCore/
|
||||||
${QtXml_BINARY_DIR}/PySide/QtXml/
|
${QtXml_BINARY_DIR}/PySide/QtXml/
|
||||||
${QtGui_BINARY_DIR}/PySide/QtGui/
|
${QtGui_BINARY_DIR}/PySide/QtGui/
|
||||||
${CMAKE_CURRENT_BINARY_DIR}/PySide/QtUiTools)
|
${CMAKE_CURRENT_BINARY_DIR}/PySide/QtUiTools)
|
||||||
set(QtUiTools_libraries pyside
|
set(QtUiTools_libraries pyside
|
||||||
|
uiplugin
|
||||||
${PYSIDE_PYTHON_LIBRARIES}
|
${PYSIDE_PYTHON_LIBRARIES}
|
||||||
${QT_QTCORE_LIBRARY}
|
${QT_QTCORE_LIBRARY}
|
||||||
${QT_QTGUI_LIBRARY}
|
${QT_QTGUI_LIBRARY}
|
||||||
|
${QT_QTDESIGNER_LIBRARY}
|
||||||
${QT_QTUITOOLS_LIBRARY})
|
${QT_QTUITOOLS_LIBRARY})
|
||||||
set(QtUiTools_deps QtGui QtXml)
|
set(QtUiTools_deps QtGui QtXml)
|
||||||
create_pyside_module(QtUiTools
|
create_pyside_module(QtUiTools
|
||||||
|
|
@ -31,3 +35,4 @@ create_pyside_module(QtUiTools
|
||||||
QtUiTools_typesystem_path
|
QtUiTools_typesystem_path
|
||||||
QtUiTools_SRC
|
QtUiTools_SRC
|
||||||
"")
|
"")
|
||||||
|
|
||||||
|
|
|
||||||
47
PySide/QtUiTools/glue/plugins.h
Normal file
47
PySide/QtUiTools/glue/plugins.h
Normal file
|
|
@ -0,0 +1,47 @@
|
||||||
|
/*
|
||||||
|
* This file is part of the PySide project.
|
||||||
|
*
|
||||||
|
* Copyright (C) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
|
||||||
|
*
|
||||||
|
* Contact: PySide team <contact@pyside.org>
|
||||||
|
*
|
||||||
|
* This library is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
* License as published by the Free Software Foundation; either
|
||||||
|
* version 2.1 of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This library is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public
|
||||||
|
* License along with this library; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _PLUGIN_H_
|
||||||
|
#define _PLUGIN_H_
|
||||||
|
|
||||||
|
#include <QPluginLoader>
|
||||||
|
#include "customwidgets.h"
|
||||||
|
|
||||||
|
inline void registerCustomWidget(PyObject* obj)
|
||||||
|
{
|
||||||
|
static PyCustomWidgets* plugin = 0;
|
||||||
|
|
||||||
|
if (plugin == 0) {
|
||||||
|
foreach(QObject* o, QPluginLoader::staticInstances()) {
|
||||||
|
plugin = qobject_cast<PyCustomWidgets*>(o);
|
||||||
|
if (o)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!plugin)
|
||||||
|
qDebug() << "Fail to load uiloader plugin";
|
||||||
|
else
|
||||||
|
plugin->registerWidgetType(obj);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
@ -23,6 +23,18 @@
|
||||||
<load-typesystem name="typesystem_xml.xml" generate="no" />
|
<load-typesystem name="typesystem_xml.xml" generate="no" />
|
||||||
|
|
||||||
<object-type name="QUiLoader">
|
<object-type name="QUiLoader">
|
||||||
|
<extra-includes>
|
||||||
|
<include file-name="glue/plugins.h" location="local"/>
|
||||||
|
</extra-includes>
|
||||||
|
<inject-code>
|
||||||
|
Q_IMPORT_PLUGIN(uiplugin);
|
||||||
|
</inject-code>
|
||||||
|
<add-function signature="registerCustomWidget(PyObject*)" return-type="void">
|
||||||
|
<inject-code class="target" position="beginning">
|
||||||
|
registerCustomWidget(%PYARG_1);
|
||||||
|
%CPPSELF.addPluginPath(""); // force reload widgets
|
||||||
|
</inject-code>
|
||||||
|
</add-function>
|
||||||
<modify-function signature="createAction(QObject *, const QString&)">
|
<modify-function signature="createAction(QObject *, const QString&)">
|
||||||
<modify-argument index="return">
|
<modify-argument index="return">
|
||||||
<parent index="1" action="add"/>
|
<parent index="1" action="add"/>
|
||||||
|
|
|
||||||
29
plugins/CMakeLists.txt
Normal file
29
plugins/CMakeLists.txt
Normal file
|
|
@ -0,0 +1,29 @@
|
||||||
|
project(plugins)
|
||||||
|
|
||||||
|
set(ui_plugin_src
|
||||||
|
customwidgets.cpp
|
||||||
|
customwidget.cpp
|
||||||
|
)
|
||||||
|
|
||||||
|
set (ui_plugin_moc
|
||||||
|
customwidget.h
|
||||||
|
customwidgets.h
|
||||||
|
)
|
||||||
|
|
||||||
|
QT4_WRAP_CPP(MOC_FILES ${ui_plugin_moc})
|
||||||
|
include_directories(${QT_QTDESIGNER_INCLUDE_DIR}
|
||||||
|
${SHIBOKEN_INCLUDE_DIR}
|
||||||
|
${PYTHON_INCLUDE_DIR})
|
||||||
|
|
||||||
|
add_library(uiplugin STATIC ${ui_plugin_src} ${MOC_FILES})
|
||||||
|
add_definitions(-fPIC)
|
||||||
|
add_definitions(-DQT_STATICPLUGIN)
|
||||||
|
target_link_libraries(uiplugin
|
||||||
|
${QT_QTDESIGNER_LIBRARY}
|
||||||
|
${SHIBOKEN_LIBRARY}
|
||||||
|
${PYTHON_LIBRARY})
|
||||||
|
if (CMAKE_BUILD_TYPE STREQUAL "Debug")
|
||||||
|
set(LIBRARY_OUTPUT_SUFFIX ${CMAKE_DEBUG_POSTFIX})
|
||||||
|
else()
|
||||||
|
set(LIBRARY_OUTPUT_SUFFIX ${CMAKE_RELEASE_POSTFIX})
|
||||||
|
endif()
|
||||||
131
plugins/customwidget.cpp
Normal file
131
plugins/customwidget.cpp
Normal file
|
|
@ -0,0 +1,131 @@
|
||||||
|
/*
|
||||||
|
* This file is part of the PySide project.
|
||||||
|
*
|
||||||
|
* Copyright (C) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
|
||||||
|
*
|
||||||
|
* Contact: PySide team <contact@pyside.org>
|
||||||
|
*
|
||||||
|
* This library is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
* License as published by the Free Software Foundation; either
|
||||||
|
* version 2.1 of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This library is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public
|
||||||
|
* License along with this library; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#include "customwidget.h"
|
||||||
|
|
||||||
|
#include <shiboken.h>
|
||||||
|
|
||||||
|
struct PyCustomWidgetPrivate
|
||||||
|
{
|
||||||
|
PyObject* pyObject;
|
||||||
|
bool initialized;
|
||||||
|
};
|
||||||
|
|
||||||
|
PyCustomWidget::PyCustomWidget(PyObject* objectType)
|
||||||
|
: m_data(new PyCustomWidgetPrivate())
|
||||||
|
{
|
||||||
|
m_data->pyObject = objectType;
|
||||||
|
}
|
||||||
|
|
||||||
|
PyCustomWidget::~PyCustomWidget()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
bool PyCustomWidget::isContainer() const
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool PyCustomWidget::isInitialized() const
|
||||||
|
{
|
||||||
|
return m_data->initialized;
|
||||||
|
}
|
||||||
|
|
||||||
|
QIcon PyCustomWidget::icon() const
|
||||||
|
{
|
||||||
|
return QIcon();
|
||||||
|
}
|
||||||
|
|
||||||
|
QString PyCustomWidget::domXml() const
|
||||||
|
{
|
||||||
|
return QString();
|
||||||
|
}
|
||||||
|
|
||||||
|
QString PyCustomWidget::group() const
|
||||||
|
{
|
||||||
|
return QString();
|
||||||
|
}
|
||||||
|
|
||||||
|
QString PyCustomWidget::includeFile() const
|
||||||
|
{
|
||||||
|
return QString();
|
||||||
|
}
|
||||||
|
|
||||||
|
QString PyCustomWidget::name() const
|
||||||
|
{
|
||||||
|
static QString objectName;
|
||||||
|
if (objectName.isEmpty()) {
|
||||||
|
objectName = QString(reinterpret_cast<PyTypeObject*>(m_data->pyObject)->tp_name);
|
||||||
|
}
|
||||||
|
return objectName;
|
||||||
|
}
|
||||||
|
|
||||||
|
QString PyCustomWidget::toolTip() const
|
||||||
|
{
|
||||||
|
return QString();
|
||||||
|
}
|
||||||
|
|
||||||
|
QString PyCustomWidget::whatsThis() const
|
||||||
|
{
|
||||||
|
return QString();
|
||||||
|
}
|
||||||
|
|
||||||
|
QWidget *PyCustomWidget::createWidget(QWidget *parent)
|
||||||
|
{
|
||||||
|
//Create a python instance and return cpp object
|
||||||
|
PyObject* pyParent;
|
||||||
|
bool unkowParent = false;
|
||||||
|
if (parent) {
|
||||||
|
pyParent = Shiboken::BindingManager::instance().retrieveWrapper(parent);
|
||||||
|
if (!pyParent) {
|
||||||
|
pyParent = Shiboken::Converter<QWidget*>::toPython(parent);
|
||||||
|
unkowParent = true;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
pyParent = Py_None;
|
||||||
|
}
|
||||||
|
|
||||||
|
Shiboken::AutoDecRef pyArgs(PyTuple_New(1));
|
||||||
|
PyTuple_SET_ITEM(pyArgs, 0, pyParent); //tuple will keep pyParent reference
|
||||||
|
|
||||||
|
//Call python constructor
|
||||||
|
PyObject* result = PyObject_CallObject(m_data->pyObject, pyArgs);
|
||||||
|
|
||||||
|
QWidget* widget = 0;
|
||||||
|
if (result) {
|
||||||
|
if (unkowParent) //if parent does not exists in python, transfer the ownership to cpp
|
||||||
|
Shiboken::BindingManager::instance().transferOwnershipToCpp(result);
|
||||||
|
else
|
||||||
|
Shiboken::setParent(pyParent, result);
|
||||||
|
|
||||||
|
widget = reinterpret_cast<QWidget*>(Shiboken::getCppPointer(result, result->ob_type));
|
||||||
|
}
|
||||||
|
|
||||||
|
return widget;
|
||||||
|
}
|
||||||
|
|
||||||
|
void PyCustomWidget::initialize(QDesignerFormEditorInterface *core)
|
||||||
|
{
|
||||||
|
m_data->initialized = true;
|
||||||
|
}
|
||||||
|
|
||||||
58
plugins/customwidget.h
Normal file
58
plugins/customwidget.h
Normal file
|
|
@ -0,0 +1,58 @@
|
||||||
|
/*
|
||||||
|
* This file is part of the PySide project.
|
||||||
|
*
|
||||||
|
* Copyright (C) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
|
||||||
|
*
|
||||||
|
* Contact: PySide team <contact@pyside.org>
|
||||||
|
*
|
||||||
|
* This library is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
* License as published by the Free Software Foundation; either
|
||||||
|
* version 2.1 of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This library is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public
|
||||||
|
* License along with this library; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _PY_CUSTOM_WIDGET_H_
|
||||||
|
#define _PY_CUSTOM_WIDGET_H_
|
||||||
|
|
||||||
|
#include <QtDesigner/QtDesigner>
|
||||||
|
#include <QDesignerCustomWidgetInterface>
|
||||||
|
#include <shiboken.h>
|
||||||
|
|
||||||
|
struct PyCustomWidgetPrivate;
|
||||||
|
|
||||||
|
class PyCustomWidget: public QObject, public QDesignerCustomWidgetInterface
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
Q_INTERFACES(QDesignerCustomWidgetInterface)
|
||||||
|
|
||||||
|
public:
|
||||||
|
PyCustomWidget(PyObject* objectType);
|
||||||
|
~PyCustomWidget();
|
||||||
|
|
||||||
|
bool isContainer() const;
|
||||||
|
bool isInitialized() const;
|
||||||
|
QIcon icon() const;
|
||||||
|
QString domXml() const;
|
||||||
|
QString group() const;
|
||||||
|
QString includeFile() const;
|
||||||
|
QString name() const;
|
||||||
|
QString toolTip() const;
|
||||||
|
QString whatsThis() const;
|
||||||
|
QWidget *createWidget(QWidget *parent);
|
||||||
|
void initialize(QDesignerFormEditorInterface *core);
|
||||||
|
|
||||||
|
private:
|
||||||
|
QScopedPointer<PyCustomWidgetPrivate> m_data;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
67
plugins/customwidgets.cpp
Normal file
67
plugins/customwidgets.cpp
Normal file
|
|
@ -0,0 +1,67 @@
|
||||||
|
/*
|
||||||
|
* This file is part of the PySide project.
|
||||||
|
*
|
||||||
|
* Copyright (C) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
|
||||||
|
*
|
||||||
|
* Contact: PySide team <contact@pyside.org>
|
||||||
|
*
|
||||||
|
* This library is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
* License as published by the Free Software Foundation; either
|
||||||
|
* version 2.1 of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This library is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public
|
||||||
|
* License along with this library; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "customwidgets.h"
|
||||||
|
#include "customwidget.h"
|
||||||
|
|
||||||
|
#include <shiboken.h>
|
||||||
|
|
||||||
|
struct PyCustomWidgetPrivate
|
||||||
|
{
|
||||||
|
PyObject* pyObject;
|
||||||
|
bool initialized;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct PyCustomWidgetsPrivate
|
||||||
|
{
|
||||||
|
QList<QDesignerCustomWidgetInterface*> widgets;
|
||||||
|
~PyCustomWidgetsPrivate();
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
PyCustomWidgetsPrivate::~PyCustomWidgetsPrivate()
|
||||||
|
{
|
||||||
|
foreach(QDesignerCustomWidgetInterface* iface, widgets)
|
||||||
|
delete iface;
|
||||||
|
widgets.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
PyCustomWidgets::PyCustomWidgets(QObject *parent)
|
||||||
|
: QObject(parent), m_data(new PyCustomWidgetsPrivate)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
PyCustomWidgets::~PyCustomWidgets()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void PyCustomWidgets::registerWidgetType(PyObject* widget)
|
||||||
|
{
|
||||||
|
m_data->widgets.append(new PyCustomWidget(widget));
|
||||||
|
}
|
||||||
|
|
||||||
|
QList<QDesignerCustomWidgetInterface*> PyCustomWidgets::customWidgets() const
|
||||||
|
{
|
||||||
|
return m_data->widgets;
|
||||||
|
}
|
||||||
|
|
||||||
|
Q_EXPORT_STATIC_PLUGIN2(uiplugin, PyCustomWidgets)
|
||||||
50
plugins/customwidgets.h
Normal file
50
plugins/customwidgets.h
Normal file
|
|
@ -0,0 +1,50 @@
|
||||||
|
/*
|
||||||
|
* This file is part of the PySide project.
|
||||||
|
*
|
||||||
|
* Copyright (C) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
|
||||||
|
*
|
||||||
|
* Contact: PySide team <contact@pyside.org>
|
||||||
|
*
|
||||||
|
* This library is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
* License as published by the Free Software Foundation; either
|
||||||
|
* version 2.1 of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This library is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public
|
||||||
|
* License along with this library; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _PY_CUSTOM_WIDGETS_H_
|
||||||
|
#define _PY_CUSTOM_WIDGETS_H_
|
||||||
|
|
||||||
|
#include <customwidget.h>
|
||||||
|
|
||||||
|
#include <QtDesigner/QtDesigner>
|
||||||
|
#include <QtPlugin>
|
||||||
|
#include <QDesignerCustomWidgetInterface>
|
||||||
|
#include <shiboken.h>
|
||||||
|
|
||||||
|
struct PyCustomWidgetsPrivate;
|
||||||
|
|
||||||
|
class PyCustomWidgets: public QObject, public QDesignerCustomWidgetCollectionInterface
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
Q_INTERFACES(QDesignerCustomWidgetCollectionInterface)
|
||||||
|
|
||||||
|
public:
|
||||||
|
PyCustomWidgets(QObject *parent = 0);
|
||||||
|
~PyCustomWidgets();
|
||||||
|
virtual QList<QDesignerCustomWidgetInterface*> customWidgets() const;
|
||||||
|
void registerWidgetType(PyObject* widget);
|
||||||
|
|
||||||
|
private:
|
||||||
|
QScopedPointer<PyCustomWidgetsPrivate> m_data;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
Loading…
Add table
Add a link
Reference in a new issue