У вас есть пара проблем в вашем коде: вы используете sprite
в качестве переменной, пока она не определена.Он должен быть объявлен как var
в вашем java-скрипте.
Во-вторых, ваш sprite.qml
создает Item
, который не ожидается в качестве дочернего элемента в вашем Column
макете.Так что вам нужно только определить rectangle
внутри sprite.qml
, исправляя эти проблемы, вы получите новый прямоугольник, как и ожидалось
Bonus : если вы хотите правильно рендериться при повторении нажатий, вынужно следить за высотой вашего контейнера Item, чтобы убедиться, что он может содержать вновь созданные прямоугольники.так что вы можете добавить в свой скрипт что-то вроде этого: itemRef.height = itemRef.height + sprite.height
Правильный код может выглядеть следующим образом:
...
onClicked: {
var component;
var sprite;
component = Qt.createComponent("Sprite.qml");
if (component.status === Component.Ready){
sprite = component.createObject(columnRef);
itemRef.height = itemRef.height + sprite.height
}
}
...
и sprite.qml
import QtQuick 2.9
Rectangle { color: "red"; radius: 10.0
width: 300; height: 50
Text { anchors.centerIn: parent
font.pointSize: 24; text: "new" } }
Результат: