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