gpt4 book ai didi

javascript - QML:如何等到组件因属性更改而重新绘制?

转载 作者:行者123 更新时间:2023-11-30 05:41:30 26 4
gpt4 key购买 nike

我有一个带有 MouseArea 的可拖动 ItemItemxy 属性在 MouseAreaonReleased 信号处理程序中更改。

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")
}
}
}

关于javascript - QML:如何等到组件因属性更改而重新绘制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20596771/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com