I have a MouseArea that I want to start off centered and then have an absolute position once the up/down/left/right keys are pressed. My problem is that I don't know how to clear the anchor on the MouseArea so that I can specify an absolute position:
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 } } } }
At first I just tried setting mouseArea.anchors
to undefined
but got an error about anchors
being a read-only property. I then discovered AnchorChanges, but I can't find a way to remove/clear the anchor; setting anchors.bottom
etc. to undefined
doesn't work.
QML provides anchors to position different items relative to each others. For each item, there are 7 imaginary lines called anchor lines. An item can be placed in these anchor lines relative to another item(parent or any sibling).
Opacity is specified as a number between 0.0 (fully transparent) and 1.0 (fully opaque). The default value is 1.0. When this property is set, the specified opacity is also applied individually to child items. This may have an unintended effect in some circumstances.
The Qt Quick anchoring system allows you to define relationships between the anchor lines of different items. For example, you can write: Rectangle { id: rect1; ... } Rectangle { id: rect2; anchors.
If an Item is affected by a Layout then you must use Layout. margins if you want to set all the margins to the same value, but if you want to set a different margin in each direction you must use Layout. leftMargin, Layout. topMargin, Layout.
According to docs, setting an anchor attribute to undefined
should work. I don't quite get why AnchorChanges
did not allow to set anchors.centerIn
, but you can workaround it in your moveMouseArea
function:
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; }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With