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