如何将 QQuickItem 的中心转换为新的中心
How to transform the center of a QQuickItem to a new center
我有一个 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
的中心更改为新的中心 (Qt.point(some_x_center, some_y_center)) 当my_item_2
得到一个点击事件。
另外,是否可以获取另一个项目的中心?喜欢 app_main_window
或 my_item_2
的中心以应用到目标 my_item_1
?
PS:
我已经使代码变得简单来使问题objective。我的实际代码中有一个相当复杂的逻辑,我需要在不使用锚点的情况下将 my_item_1
之类的东西重新对齐到新中心,因为 QQuickitem
我正在尝试这样做,它被缩放和平移到一个新点。
如果无法使用锚点,您必须手动计算中心并分配它。
快速示例:
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()
适配坐标
我有一个 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
的中心更改为新的中心 (Qt.point(some_x_center, some_y_center)) 当my_item_2
得到一个点击事件。
另外,是否可以获取另一个项目的中心?喜欢 app_main_window
或 my_item_2
的中心以应用到目标 my_item_1
?
PS:
我已经使代码变得简单来使问题objective。我的实际代码中有一个相当复杂的逻辑,我需要在不使用锚点的情况下将 my_item_1
之类的东西重新对齐到新中心,因为 QQuickitem
我正在尝试这样做,它被缩放和平移到一个新点。
如果无法使用锚点,您必须手动计算中心并分配它。
快速示例:
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()
适配坐标