首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >清除QML锚点

清除QML锚点
EN

Stack Overflow用户
提问于 2012-06-03 19:08:14
回答 2查看 15.1K关注 0票数 24

我有一个MouseArea,我想从居中开始,然后在按下up/down/left/right键后有一个绝对位置。我的问题是,我不知道如何清除MouseArea上的锚点,以便指定一个绝对位置:

代码语言:javascript
复制
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不起作用。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-06-04 06:53:21

根据docs的说法,将锚属性设置为undefined应该是可行的。我不太明白为什么AnchorChanges不允许设置anchors.centerIn,但是你可以在你的moveMouseArea函数中解决这个问题:

代码语言:javascript
复制
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;
}
票数 27
EN

Stack Overflow用户

发布于 2012-11-16 07:46:01

谢谢你们的帮助。我发现在一个状态中设置未定义是有效的(如果你说的有效只是指它不会产生错误),然而一旦元素移动到另一个状态,锚点就会神奇地(非常令人沮丧地)返回。即使在最终状态中将所有锚点设置为未定义,也会发生这种情况。但是,如上所述,在更改状态之前在函数中设置undefined非常有效。在我的例子中,我在onPressed的mouseArea中设置了它。

代码语言:javascript
复制
                onPressed: {
                plotWindow04Frame.anchors.bottom = undefined
                plotWindow04Frame.anchors.left = undefined
                plotWindow04Frame.state = "inDrag"
            }

我发现没有必要提到onReleased中的锚,只需要提到下一个状态。丢弃:{ plotWindow04Frame.state =“onReleased”}

另外,我应该提一下,最后的“丢弃”状态也没有提到锚点,只是不透明。

代码语言:javascript
复制
    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的底部,但一旦用户拿起它们,他们就可以把它们放在任何他们喜欢的地方。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10869785

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档