QML:如何等待由于属性更改而重新绘制组件?

时间:2013-12-15 16:25:03

标签: javascript qt qml

我有一个可拖动的Item MouseAreaItem的{​​{1}}和x属性在y信号内被更改onReleased的处理程序。

MouseArea

问题是,在重新定位项目之前调用信号处理程序(因为它的x和y属性发生了变化),这导致GUI看起来被冻结,直到信号处理程序返回,之后item被重新定位到正确的位置。

如何在重新绘制项目之后推迟执行信号处理程序?

1 个答案:

答案 0 :(得分:1)

我用谷歌搜索了qml force redraw',但没有找到任何帮助。添加计时器可以走路。

import QtQuick 2.0

Rectangle {
    width: 640; height: 480

    Rectangle {
        id: item
        x: 10; Behavior on x {NumberAnimation{}}
        y: 10; Behavior on y {NumberAnimation{}}
        width: 100; height: width
        color: "red"
        signal someSignal

        MouseArea {
            anchors.fill: parent
            onReleased: {
                /* change x and y properties of item */
                item.x = 100
                item.y = 100
                /* emit signal to do further event handling */
//                item.someSignal()
                timer.start()
            }
            drag.target: parent
        }
        Timer {
            id: timer
            onTriggered: item.someSignal();
        }

        onSomeSignal: {
            var a = 0
            for (var i=0; i<999999999; i++)
                a ++
            console.log("done")
        }
    }
}