aboutsummaryrefslogtreecommitdiffstats
path: root/examples/declarative/referenceexamples/extended/doc/extended.rst
blob: 745960535f705ecb0775c505c97c9132f604fc14 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
.. _qml-extension-objects-example:

Extending QML - Extension Objects Example
=========================================

This example builds on the the :ref:`qml-adding-types-example`.

Shows how to use QmlExtended decorator to provide an extension object to a
QLineEdit without modifying or subclassing it.

Firstly, the LineEditExtension class is registered with the QML system as an
extension of QLineEdit. We declare a foreign type to do this as we cannot
modify Qt's internal QLineEdit class.

.. code-block:: python

    @QmlNamedElement("QLineEdit")
    @QmlExtended(LineEditExtension)
    @QmlForeign(QLineEdit)
    class LineEditForeign(QObject):


Note the usage of ``QmlNamedElement()`` instead of ``QmlElement()``.
``QmlElement()`` uses the name of the containing type by default,
``LineEditExtension`` in this case. As the class being an extension class is
an implementation detail, we choose the more natural name ``QLineEdit``
instead.

The QML engine then instantiates a QLineEdit.

In QML, a property is set on the line edit that only exists in the
``LineEditExtension`` class:

.. code-block:: javascript

    QLineEdit {
        left_margin: 20
    }

The extension type performs calls on the ``QLineEdit`` that otherwise will not
be accessible to the QML engine.