在Qml中自动复制矩形

在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

是否可以通过使用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
    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对象。不幸的是,你不能克隆我知道的一个引用。当我第一次遇到这个的时候,我也很惊讶。然而,你很快就会习惯的。这就像你想的一样简单。