当 QML 项目的尺寸发生变化时如何获得通知?

How to get notified when a QML item's dimensions change?

我知道我可以使用插槽 onWidthChangedonHeightChanged 了解 QML 项目的宽度或高度是否发生了变化。这是通过执行如下操作。

导入 QtQuick 2.12

Item {
    id: my_item

    onWidthChanged: {
        if (my_item.visible) {
            console.log("Dimension chnaged")
        }
    }

    onHeightChanged: {
        if (my_item.visible) {
            console.log("Dimension chnaged")
        }
    }
}

以上效果很好。但我只想知道我的 QML 项目的维度是否发生了变化。当宽度或高度改变时,我只需要一个回调。我不需要两者的回调。
是否有仅监听尺寸变化的 QML 信号?

我使用的是Qt 5.15.7商业版。

作为解决方法,您可以创建一个绑定到 widthheight 的 属性,并将处理程序连接到 属性 的已更改信号:

property double dimensions: width * height
onDimensionsChanged: {
   if(my_item.visible)
       console.log("Dimension changed")
}

存在一个小风险,即交换 widthheight 时数字不会改变,但在您的情况下这可能是值得的

如评论中所述,默认情况下目前不存在此类信号。

您可以创建 sizerect 类型 属性 并对此做出反应:

property size dimensions: Qt.size(width, height)
onDimensionsChanged: console.log("Dimension changed")

这是一个为发射器供电的 WASM 示例:

https://www.canonic.com/#https://playground.canonic.com/525f6691-fe05-4824-a7f1-574bb8cabd8b/dimension-changed-signal-example