在Qml中自动复制矩形

时间:2014-02-25 19:35:23

标签: qml

是否可以通过使用for循环或任何其他方式制作一定数量的矩形副本,并能够使用{{1}更改每个矩形属性,如x,y,宽度等。 }

我尝试了以下内容:

QML

但不幸的是,它没有与我合作,有没有办法使这个工作

2 个答案:

答案 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"
  }
}