扩展 QML - 扩展对象范例

Extension Objects.

此范例构建于:

Shows how to use QML_EXTENDED to provide an extension object 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 类。

struct QLineEditForeign
{
    Q_GADGET
    QML_FOREIGN(QLineEdit)
    QML_ELEMENT
    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.

范例工程 @ code.qt.io