Qt 在一个圆中排列多个对象QML

Qt 在一个圆中排列多个对象QML,qt,qml,Qt,Qml,我需要排列多个qtquick对象(圆形状),以便它们自己形成一个圆。我找不到一种方法来集体创建对象,以便在创建后可以访问其属性。目前,我正在JS for循环中创建三个不同的对象:圆、旋转和平移。然后我将旋转和平移设置为每个圆的变换组件,直到它们的临时变量(在for循环中)超出范围。但我希望能够随时更改每个圆的变换分量。有办法做到这一点吗 以下是我的JS代码: function drawCircles() { var translationcomponent = Qt.createComponen

我需要排列多个qtquick对象(圆形状),以便它们自己形成一个圆。我找不到一种方法来集体创建对象,以便在创建后可以访问其属性。目前,我正在JS for循环中创建三个不同的对象:圆、旋转和平移。然后我将旋转和平移设置为每个圆的变换组件,直到它们的临时变量(在for循环中)超出范围。但我希望能够随时更改每个圆的变换分量。有办法做到这一点吗

以下是我的JS代码:

function drawCircles() {
var translationcomponent = Qt.createComponent("translations.qml");
var circlecomponent = Qt.createComponent("circles.qml");
var rotationcomponent = Qt.createComponent("rotations.qml");
for(var i = 0; i<5; i++) {
    var circle = circlecomponent.createObject(appbase);
    var translation = translationcomponent.createObject(appbase);
    var rotation = rotationcomponent.createObject(appbase);

    rotation.angle = 72*i;
    rotation.origin.x = 25;
    rotation.origin.y = 25;
    translation.y = -150
    circle.transform = [translation,rotation];

}
下面是应用程序的外观:

第一个想法是用来安排项目,例如:

路径视图{ 宽度:400 身高:400 anchors.centerIn:父对象 模型:ListModel{ ListElement{name:“element1”} ListElement{name:“element2”} ListElement{name:“element3”} ListElement{name:“element4”} ListElement{name:“element5”} ListElement{name:“element6”} ListElement{name:“element7”} ListElement{name:“element8”} } 代表:矩形{ 宽度:40 身高:40 半径:20 颜色:“蓝色” 正文{ 文本:名称 anchors.centerIn:父对象 转换:[ 翻译{y:-30} ] } } 路径:路径{ id:myPath startX:0;startY:0 PATHSSVG{path:“M 200 200 M-200 0 a 200 0 0 1 0 400 0 a 200 200 0 1 0-400 0”} } }
路径
在这里是硬编码的,但您可以根据下一步采用它:

mcx-cy-M-r,0arr,r01,0(r*2),0arr,r01,0-(r*2),0

其中,
r
是圆的半径,(
cx
cy
)是圆心

同样的方式,但更清楚:

path: Path {
        startX: 200
        startY: 0
        PathArc { x: 200; y: 400; radiusX: 200; radiusY: 200; useLargeArc: true }
        PathArc { x: 200; y: 0; radiusX: 200; radiusY: 200; useLargeArc: true }
    }

问题是无法绘制填充圆,因为在这种情况下,起点=终点-终点-将不会绘制任何图形。解决方法是使用2个半圆。

谢谢您的帮助;它很有魅力。我希望能够在路径上移动这些圆,或者改变它们的数量,我能用这种方法做些什么吗?我想知道我是否为此选择了正确的语言,或者QML是否适用于更多的静态程序?^我的意思是以编程方式移动它们,而不是通过轻弹。当然,您可以轻松做到这一点。使用model.append()将项添加到模型或以相同的方式删除。若要制作动画,您可以使用其中一个动画项目。我已设法使其完全按照我所希望的方式工作,再次感谢您的帮助。
path: Path {
        startX: 200
        startY: 0
        PathArc { x: 200; y: 400; radiusX: 200; radiusY: 200; useLargeArc: true }
        PathArc { x: 200; y: 0; radiusX: 200; radiusY: 200; useLargeArc: true }
    }