我有一个Qt QML应用程序。以下是该应用程序的完整代码:
代码:
import QtQuick 2.9
import QtQuick.Window 2.2
Window {
id: app_main_window
visible: true
width: 800
height: 600
title: qsTr("Hello QML")
Rectangle {
id: my_item_1
x: 100
y: 100
width: 100
height: 100
color: "grey"
visible: true
z: 1
}
Rectangle {
id: my_item_2
x: 400
y: 400
width: 100
height: 100
color: "grey"
visible: true
z: 1
MouseArea {
anchors.fill: parent
onClicked: {
// How can I change the center of my_item_1 to some arbitrary new center. lets say app_main_window's center. this involves another question. how can I get app_main_window's center?
}
}
}
}
问题:
我的问题很简单。 如何可以将任何QQuickitem
的中心更改为新的中心?因此,在上述情况下如何可以在my_item_1
获得时将my_item_2
的中心更改为新的中心( Qt.point(some_x_center,some_y_center))点击事件。
另外,是否可以获得另一个项目的中心?与app_main_window
或my_item_2
的中心一样适用于目标my_item_1
?
PS:
我已经使代码变得简单,使问题成为目标。在我的实际代码中我有一个非常复杂的逻辑,我需要将my_item_1
之类的东西重新调整到一个新的中心而不使用锚点作为QQuickitem
我试图用它来缩放和平移成一个新观点。
答案 0 :(得分:1)
如果无法使用锚点,则必须手动计算中心并进行分配。
快速举例:
Item
{
anchors.fill: parent
Rectangle
{
id: nonParentOrSibling
width: 200
height: 200
x: 350
y: 240
color: "red"
}
}
Rectangle
{
id: rectToMove
width: 100
height: 100
y: 200
color: "blue"
MouseArea
{
anchors.fill: parent
onClicked:
{
var itemCenter = Qt.point(nonParentOrSibling.x + nonParentOrSibling.width / 2, nonParentOrSibling.y + nonParentOrSibling.height / 2)
rectToMove.x = itemCenter.x - rectToMove.width / 2
rectToMove.y = itemCenter.y - rectToMove.height / 2
}
}
}
请注意,这只是一次移动,如果移动目标,矩形不会移动。
要使其遵循目标,您必须使用Qt.binding重新绑定目标。
如果rectToMove与nonParentOrSibling不在同一坐标系中,您可以使用Item.mapToItem()
和mapFromItem()
来调整坐标。