QML “Фокусы”

Тут будут маленькие примеры qml кода, которые показывают полезные приёмы

Динамика

Как создать компонент динамически из строки текста

1
2
3
QQmlComponent component(&engine);
component.setData("import QtQuick 2.0; ListView { model: myModel }", QUrl());
QObject *window = component.create(context);

Редкий пример т.к. обычно в документации показывают как загрузить компонент (на самом деле “как загрузить модуль”) из файла.

и все знают как создать объект из строки QML.

А этот пример - “как создать компонент из строки кода” и по нему создать объект (клон? думаю да. думаю тут “прототипное наследование”).

Как зарегистрировать и использовать qml singletonInstance

Самая полезная функция класса QQmlEngine получение синглтона singletonInstance зарегистрированного класса.

doc https://doc.qt.io/qt-5/qqmlengine.html#singletonInstance

Как в контексте дать доступ к всякому ("myModel")

вторая полезная функция класса QQmlEngine задание получение контекста и его изменение.

1
2
3
4
QQmlEngine engine;
QStringListModel modelData;
QQmlContext *context = new QQmlContext(engine.rootContext());
context->setContextProperty("myModel", &modelData);

Не делайте так

Не обращайтесь по id внутри пакета между модулями qmldir

![img/image-20220214160247915.png)

Это будет работать, но так не надо делать.