Создание компонента QML из строки

Возможно создание QML-компонентов из файлов с помощью Qt.createComponent(filename)

Можно создать объект QML из строк с помощью Qt.createQmlObject(string)

Возможно создание QML-компонентов из кода через Component {...}

Но возможно ли создать компонент QML из строки? Я имею в виду, не пытаясь сохранить его как временный файл только ради использования Qt.createComponent(filename)?

EDIT: просто чтобы уточнить, у меня уже есть компоненты в этом примере:

import QtQuick 2.0
Rectangle {
 width: 100
 height: 100
 color: "red"
}

Поэтому мне нужно создать компонент из этой строки, не создавая его. Я не могу просто обернуть строку в "Component {" + string + "}", потому что импорт не может быть объявлен внутри компонента. Одним из решений было бы использовать комплексный синтаксический анализ для вставки компонента непосредственно перед первым элементом и после импорта, но это не делает меня самым элегантным решением.

1 ответ

используйте Qt.createQmlObject(string). Он создает объект, а не прототип.

Window {
 id: mainWindow
 visible: true
 width: 600
 height: 400
 Component.onCompleted: {
 var str = '
 import QtQuick 2.3;
 Component {
 Text {
 text: "Hello, world!";
 anchors.fill: parent;
 horizontalAlignment: Text.AlignHCenter;
 verticalAlignment: Text.AlignVCenter;
 }
 }';
 var component = Qt.createQmlObject(str,mainWindow);
 var object = component.createObject(mainWindow);
 }
}

licensed under cc by-sa 3.0 with attribution.