Как я понимаю, QML Component
похож на класс класса C++. Он содержит определение объекта QML, но не является его экземпляром. Вы можете создать в этих отношениях Component
:Статически загружайте компонент QML без его создания
- Создание
.qml
файла с именем компонента в качестве его имени. - Определите его встроенный синтаксис
Component { }
.
Однако это фактически две разные вещи. Второй один больше похож на завод, потому что вы можете делать такие вещи, как:
Component {
id: factory
Rectangle { width: 100; height:100; color: "red }
}
Component.onCompleted: {
var rect1 = factory.createObject(parent);
}
В то время как с отдельным файлом необходимо сначала загрузить его на завод, как это:
var factory = Qt.createComponent("RedRectangle.qml")
var rect1 = factory.createObject(parent);
Я только занимается созданием динамического объекта, так что это не вариант:
RedRectangle {
id: rect1
}
Мой вопрос: есть ли способ для создания объектов динамически, без необходимости создания компонентов завода динамически и без указания встроенного компонента. То есть Я хочу первый пример, но где Rectangle
указан в другом файле.
Я хочу это:
Component {
id: factory
url: "RedRectangle.qml"
}
Component.onCompleted: {
var rect1 = factory.createObject(parent);
}
К сожалению, не работает. Я также пробовал:
Component {
id: factory
}
Component.onCompleted: factory.loadUrl("RedRectangle.qml");
Но это тоже не сработает. Неужели я глуп, или это просто не поддерживается?
Если бы у меня был никель на каждый раз, когда я чувствовал, что Qt должен поддерживать определенную функцию или существующая функция должна работать по-другому, я бы стал миллионером. Просто потому, что это большая структура, это не значит, что она полна, ведь во многих отношениях это далеко не так. Просто будьте рады, что решение так просто. Я потерял счет того, сколько раз мне приходилось изобретать колеса с Qt. – dtech