Extending QML - Extension Objects Example

Extension Objects.

This example builds on:

Shows how to use QML_EXTENDED 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.

 struct QLineEditForeign
 {
     Q_GADGET
     QML_FOREIGN(QLineEdit)
     QML_NAMED_ELEMENT(QLineEdit)
     QML_EXTENDED(LineEditExtension)
 };

The QML engine then instantiates a QLineEdit:

     QQmlEngine engine;
     QQmlComponent component(&engine, QUrl("qrc:example.qml"));
     auto *edit = qobject_cast<QLineEdit *>(component.create());

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

 QLineEdit {
     leftMargin: 20
 }

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

Example project @ code.qt.io