是否可以通过使用for循环或任何其他方式制作一定数量的矩形副本,并能够使用{{1}更改每个矩形属性,如x,y,宽度等。 }
我尝试了以下内容:
QML
但不幸的是,它没有与我合作,有没有办法使这个工作
答案 0 :(得分:1)
这不是那么简单。您需要使用Qt.createComponent and that object's createObject() call来实现您的目标。这不仅仅是创建矩形然后复制它的问题,您需要从qml文件中单独加载每个新副本。
类似的东西:
var rects = []
var creator = Qt.createComponent("myRect.qml")
for (var i = 0; i < 10; i++) {
rects[i] = creator.createObject(PARENT)
rects[i].x = ...
}
显然将其推断为您需要的东西。请注意对PARENT的引用,它是最终应该包含矩形的对象,它通常是像Grid或其他东西的容器。
答案 1 :(得分:1)
如果您不想使用Qt.CreateComponent
方法,还可以考虑使用Repeater组件,其中ListModel
包含每个Rectangle
的信息。以下是在场景中放置4 Rectangle
的示例:
ListModel {
id: modelRects
ListElement { _x: 0; _y:0 ; _width: 10; _height: 10; _color: "red" }
ListElement { _x: 100; _y:0 ; _width: 20; _height: 20; _color: "blue" }
ListElement { _x: 0; _y:100 ; _width: 30; _height: 30; _color: "yellow" }
ListElement { _x: 100; _y:100 ; _width: 40; _height: 40; _color: "green" }
}
Repeater {
model: modelRects
delegate: Rectangle {
width: _width
height: _height
x: _x
y: _y
color: _color
}
}
如果您不想创建ListModel
,还可以将计算基于元素的index
。以下是基于索引增长Rectangle
的示例:
Repeater {
model: 5
delegate: Rectangle {
// Index starts at 0 so you want a width higher than 0 on first element
width: 10 * (index + 1)
height: 10 * (index + 1)
x: 50 * index
y: 50 * index
color: "red"
}
}