我有一个MouseArea,我想从居中开始,然后在按下up/down/left/right键后有一个绝对位置。我的问题是,我不知道如何清除MouseArea上的锚点,以便指定一个绝对位置:
import QtQuick 2.0
import QtQuick.Window 2.0
Window {
id: screen
width: 360
height: 360
visible: true
Rectangle {
anchors.fill: parent
states: [
State {
name: "moved"
AnchorChanges {
target: mouseArea
anchors.bottom: undefined
anchors.left: undefined
anchors.right: undefined
anchors.top: undefined
}
}
]
MouseArea {
id: mouseArea
anchors.centerIn: parent
width: 250
height: 250
focus: true
onClicked: console.log("clicked!")
onPositionChanged: console.log("position changed!")
function moveMouseArea(x, y) {
mouseArea.x += x;
mouseArea.y += y;
mouseArea.state = "moved";
mouseAreaPosText.text = 'Mouse area was moved... new pos: '
+ mouseArea.x + ', ' + mouseArea.y;
}
Keys.onPressed: {
if (event.key === Qt.Key_Up)
moveMouseArea(0, -1);
if (event.key === Qt.Key_Down)
moveMouseArea(0, 1);
if (event.key === Qt.Key_Left)
moveMouseArea(-1, 0);
if (event.key === Qt.Key_Right)
moveMouseArea(1, 0);
}
Rectangle {
anchors.fill: parent
border.width: 2
border.color: "black"
color: "transparent"
}
Text {
id: mouseAreaPosText
anchors.centerIn: parent
}
}
}
}
起初,我只是尝试将mouseArea.anchors
设置为undefined
,但是得到了一个关于anchors
是一个只读属性的错误。然后我发现了AnchorChanges,但我找不到移除/清除锚点的方法;将anchors.bottom
等设置为undefined
不起作用。
发布于 2012-06-04 06:53:21
根据docs的说法,将锚属性设置为undefined
应该是可行的。我不太明白为什么AnchorChanges
不允许设置anchors.centerIn
,但是你可以在你的moveMouseArea
函数中解决这个问题:
function moveMouseArea(x, y) {
mouseArea.anchors.centerIn = undefined; // <-- reset anchor before state change
mouseArea.pos.x += x;
mouseArea.pos.y += y;
mouseArea.state = "moved";
mouseAreaPosText.text = 'Mouse area was moved... new pos: '
+ mouseArea.pos.x + ', ' + mouseArea.pos.y;
}
发布于 2012-11-16 07:46:01
谢谢你们的帮助。我发现在一个状态中设置未定义是有效的(如果你说的有效只是指它不会产生错误),然而一旦元素移动到另一个状态,锚点就会神奇地(非常令人沮丧地)返回。即使在最终状态中将所有锚点设置为未定义,也会发生这种情况。但是,如上所述,在更改状态之前在函数中设置undefined非常有效。在我的例子中,我在onPressed的mouseArea中设置了它。
onPressed: {
plotWindow04Frame.anchors.bottom = undefined
plotWindow04Frame.anchors.left = undefined
plotWindow04Frame.state = "inDrag"
}
我发现没有必要提到onReleased中的锚,只需要提到下一个状态。丢弃:{ plotWindow04Frame.state =“onReleased”}
另外,我应该提一下,最后的“丢弃”状态也没有提到锚点,只是不透明。
states: [
State {
name: "inDrag"
PropertyChanges {
target: plotWindow04Frame
opacity: .5
}
},
State {
name: "dropped"
PropertyChanges {
target: plotWindow04Frame
opacity: 1
}
}
]
transitions: Transition {
NumberAnimation { properties: "opacity"; duration:200 }
}
}
(这里的想法是,这些绘图窗口在拖动时将变得半透明(不透明度: 0.5),但当用户放置它们时会返回不透明(不透明度: 1) )
更好的是,绘图“矩形”最初固定在GUI的底部,但一旦用户拿起它们,他们就可以把它们放在任何他们喜欢的地方。
https://stackoverflow.com/questions/10869785
复制相似问题