diff options
Diffstat (limited to 'sources/pyside6/PySide6/QtUiTools/typesystem_uitools.xml')
-rw-r--r-- | sources/pyside6/PySide6/QtUiTools/typesystem_uitools.xml | 157 |
1 files changed, 157 insertions, 0 deletions
diff --git a/sources/pyside6/PySide6/QtUiTools/typesystem_uitools.xml b/sources/pyside6/PySide6/QtUiTools/typesystem_uitools.xml new file mode 100644 index 000000000..93a78c62f --- /dev/null +++ b/sources/pyside6/PySide6/QtUiTools/typesystem_uitools.xml @@ -0,0 +1,157 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Python. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +--> + +<typesystem package="PySide6.QtUiTools"> + <load-typesystem name="QtWidgets/typesystem_widgets.xml" generate="no"/> + <load-typesystem name="QtXml/typesystem_xml.xml" generate="no"/> + + <object-type name="QUiLoader"> + <extra-includes> + <include file-name="glue/plugins.h" location="local"/> + </extra-includes> + <inject-code class="native" position="beginning" file="../glue/qtuitools.cpp" snippet="uitools-loadui"/> + <inject-code file="../glue/qtuitools.cpp" snippet="quiloader"/> + <add-function signature="registerCustomWidget(PyObject*)" return-type="void"> + <modify-argument index="1"> + <rename to="customWidgetType"/> + </modify-argument> + <inject-documentation format="target" mode="append"> + Registers a Python created custom widget to QUiLoader, so it can be recognized when + loading a `.ui` file. The custom widget type is passed via the ``customWidgetType`` argument. + This is needed when you want to override a virtual method of some widget in the interface, + since duck punching will not work with widgets created by QUiLoader based on the contents + of the `.ui` file. + + (Remember that `duck punching virtual methods is an invitation for your own demise! + <https://doc.qt.io/qtforpython/shiboken6/wordsofadvice.html#duck-punching-and-virtual-methods>`_) + + Let's see an obvious example. If you want to create a new widget it's probable you'll end up + overriding :class:`~PySide6.QtGui.QWidget`'s :meth:`~PySide6.QtGui.QWidget.paintEvent` method. + + .. code-block:: python + + class Circle(QWidget): + def paintEvent(self, event): + painter = QPainter(self) + painter.setPen(self.pen) + painter.setBrush(QBrush(self.color)) + painter.drawEllipse(event.rect().center(), 20, 20) + + # ... + + loader = QUiLoader() + loader.registerCustomWidget(Circle) + circle = loader.load('circle.ui') + circle.show() + + # ... + </inject-documentation> + <inject-code class="target" position="beginning" file="../glue/qtuitools.cpp" snippet="quiloader-registercustomwidget"/> + </add-function> + <modify-function signature="createAction(QObject*,const QString&)"> + <modify-argument index="return"> + <parent index="1" action="add"/> + <define-ownership class="native" owner="c++"/> + <define-ownership class="target" owner="default"/> + </modify-argument> + </modify-function> + + <modify-function signature="createActionGroup(QObject*,const QString&)"> + <modify-argument index="return"> + <parent index="1" action="add"/> + <define-ownership class="native" owner="c++"/> + <define-ownership class="target" owner="default"/> + </modify-argument> + </modify-function> + + <modify-function signature="createLayout(const QString&,QObject*,const QString&)"> + <modify-argument index="return"> + <parent index="2" action="add"/> + <define-ownership class="native" owner="c++"/> + <define-ownership class="target" owner="default"/> + </modify-argument> + </modify-function> + + <modify-function signature="createWidget(const QString&,QWidget*,const QString&)"> + <modify-argument index="return"> + <parent index="2" action="add"/> + <define-ownership class="native" owner="c++"/> + <define-ownership class="target" owner="default"/> + </modify-argument> + </modify-function> + + <modify-function signature="load(QIODevice*,QWidget*)"> + <modify-argument index="2"> + <replace-default-expression with="0"/> + <rename to="parentWidget"/> + </modify-argument> + <modify-argument index="return"> + <define-ownership class="target" owner="target"/> + </modify-argument> + <inject-code file="../glue/qtuitools.cpp" snippet="quiloader-load-1"/> + </modify-function> + + <!-- Syntax sugar --> + <add-function signature="load(QString,QWidget*)" return-type="QWidget*"> + <modify-argument index="2"> + <replace-default-expression with="0"/> + <rename to="parentWidget"/> + </modify-argument> + <modify-argument index="return"> + <define-ownership class="target" owner="target"/> + </modify-argument> + <inject-code file="../glue/qtuitools.cpp" snippet="quiloader-load-2"/> + </add-function> + </object-type> + + <!-- + After the removal of the 'pysideuic' Python module, many users were unable to generate and + load UI classes dynamically. + This function was created to provide an equivalent solution to the 'loadUiType' function from + Riverbank's PyQt. + --> + <add-function signature="loadUiType(const QString& @uifile@)" return-type="PyObject*"> + <inject-code file="../glue/qtuitools.cpp" snippet="loaduitype"/> + </add-function> + + +</typesystem> |