import QtQuick 2.5
import QtQuick.Controls 1.4
import QtQuick.Controls.Styles 1.4
import QtQuick.Layouts 1.2
ApplicationWindow
{
visible: true
width: 640
height: 480
property int lastW: 0
property int lastH: 0
function doSomething()
{
if (lastW == width && lastH == height)
console.log("width & height same as last time")
lastW = width;
lastH = height;
}
onHeightChanged: doSomething();
onWidthChanged: doSomething();
}
为什么doSomething
调用时宽度和高度没有变化(开始时除外)。当我调整窗口大小时,会收到控制台日志消息。
运行Windows 8.1
doSomething
运行每次width
或 height
的ApplicationWindow
变化。该窗口可能会同时更改两个尺寸的大小。如果一瞬间大小从100x100变为101x101,则两个信号widthChanged
和heightChanged
将针对width=101
和发出height=101
。这就是为什么console.log("width & height same as last time")
尽管乍一看这永远不会发生的事实,却仍在执行它的原因。
对doSomething
开始运行时发表评论。对我来说,doSomething
除非调整窗口大小,否则永远不会触发。如果对您而言,它确实在应用程序启动时启动,则可能是因为在短时间内它ApplicationWindow
具有一些初始大小(例如0x0),然后它立即将大小更改为640x480并开始doSomething
运行。
在某些罕见的情况下,我上面编写的内容可能无效。您可以尝试ApplicationWindow
仅在一个维度上调整大小,但有时changed
对于相同的值有时会出现两次信号。我的猜测是,在这些情况下,值变化如此之快,以至于changed
在QML中触发两次时,您仅读取第二个值。
我怀疑它是这样工作的:width=100
然后迅速将value更改为101
fires changed
,更改为102
并再次changed
触发。之后,将执行QML信号。现在您会收到两个changed
信号,但是两者都读取了value 102
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句