在Qml中自动复制矩形
是否可以通过使用for循环或任何其他能够更改每个矩形属性(如x、y、width等)的方式来制作一定数量的矩形副本。。通过使用在Qml中自动复制矩形,qml,Qml,是否可以通过使用for循环或任何其他能够更改每个矩形属性(如x、y、width等)的方式来制作一定数量的矩形副本。。通过使用QML 我尝试了以下方法: var x = 0 var t = 80 var z = 125 var Rectangle = [] if(rs.rows.length > 0){ x = 2 for(var i = 0; i < rs.rows.length; i++){ Rectangle[i] = rectangle18 Rectan
QML
我尝试了以下方法:
var x = 0
var t = 80
var z = 125
var Rectangle = []
if(rs.rows.length > 0){
x = 2
for(var i = 0; i < rs.rows.length; i++){
Rectangle[i] = rectangle18
Rectangle[i].x = t
Rectangle[i].y = z
Rectangle[i].visible = true
t = t - 40
z = z - 7
}
}
var x=0
var t=80
var z=125
变量矩形=[]
如果(rs.rows.length>0){
x=2
对于(变量i=0;i
但不幸的是,它对我不起作用,有没有办法让它起作用呢?其实没那么简单。你需要使用它来实现你想要的。这不仅仅是创建矩形然后复制它的问题,还需要从qml文件中分别加载每个新副本 比如:
var rects = []
var creator = Qt.createComponent("myRect.qml")
for (var i = 0; i < 10; i++) {
rects[i] = creator.createObject(PARENT)
rects[i].x = ...
}
var rects=[]
var creator=Qt.createComponent(“myRect.qml”)
对于(变量i=0;i<10;i++){
rects[i]=creator.createObject(父对象)
rects[i].x=。。。
}
显然是根据你的需要来推断。请注意对父对象的引用,这是一个应该包含矩形的对象,它通常是一个像网格之类的容器。 < P>如果您不想使用<代码> Qt。CreateComponent < /C>方法,您也可以考虑使用一个包含<代码> ListMease/CODE >的组件,其中包含每个代码>矩形< <代码>的信息。下面是在场景中放置4个
矩形的示例:
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
,也可以根据元素的索引进行计算。下面是一个基于索引增长矩形的示例:
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"
}
}
哇,你让我觉得很复杂:)。是否可以使用属性varient rects=[]复制矩形?不,不是。上面的方法在内部做非常特殊的事情,比如在下面创建一个新的C++对象来容纳QML对象。不幸的是,你不能克隆我知道的一个引用。当我第一次遇到这个的时候,我也很惊讶。然而,你很快就会习惯的。这就像你想的一样简单。