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

Javascript QML:如何等待组件因属性更改而重新绘制?,javascript,qt,qml,Javascript,Qt,Qml,我有一个带有MouseArea的可拖动项,项的x和y属性在MouseArea的释放的信号处理程序中更改 Item { id: item x: 10 y: 10 width: parent.width; height: width signal someSignal MouseArea { onReleased: { /* change x and y properties of item */

我有一个带有
MouseArea
的可拖动
x
y
属性在
MouseArea
释放的
信号处理程序中更改

Item {
    id: item
    x: 10
    y: 10
    width: parent.width; height: width
    signal someSignal
    MouseArea {
        onReleased: {
            /* change x and y properties of item */ 

            /* emit signal to do further event handling */
            item.someSignal();          
        }
        drag.target: parent
    }
    ...
}
问题是,在重新定位项之前(由于其x和y属性的更改),会调用信号处理程序,这会导致GUI显示为冻结,直到信号处理程序返回,然后将项重新定位到正确的位置


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

我在谷歌上搜索了“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")
        }
    }
}
导入QtQuick 2.0
长方形{
宽度:640;高度:480
长方形{
id:项目
x:10;x{NumberAnimation{}上的行为
y:10;y{NumberAnimation{}上的行为
宽度:100;高度:宽度
颜色:“红色”
发信号
鼠耳{
锚定。填充:父级
发布日期:{
/*更改项目的x和y属性*/
项目x=100
项目y=100
/*发出信号以进行进一步的事件处理*/
//item.someSignal()
timer.start()
}
drag.target:父对象
}
计时器{
id:计时器
onTriggered:item.someSignal();
}
onSomeSignal:{
变量a=0
对于(var i=0;i