【问题标题】:How to get notified when a QML item's dimensions change?当 QML 项目的尺寸发生变化时如何得到通知?
【发布时间】:2021-11-30 18:47:16
【问题描述】:

我知道我可以使用插槽 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商业版。

【问题讨论】:

标签: qt qml qtquick2 qt5.15


【解决方案1】:

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

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

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

【讨论】:

  • 可以通过将“尺寸”更改为“宽度/高度”来减轻这种小风险。
  • 啊,不错。感谢您指出这个小风险。尽管如此,这是一种跟踪尺寸变化的聪明方法:-)
【解决方案2】:

如 cmets 中所述,默认情况下当前不存在此类信号。

您可以创建一个 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

【讨论】:

    猜你喜欢
    • 2017-10-18
    • 2022-07-22
    • 2012-04-13
    • 2019-08-16
    • 2018-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-04
    相关资源
    最近更新 更多