qt - 如何检测 QML 项目的尺寸更改何时完成或停止?

标签 qt qml qt5.15

我有一个针对 Qt 5.15.8 编写的 Qt 应用程序。我在其上声明了 QML 项目。我知道以下是我可以确定 QML 项目何时调整大小的方法。基本上我知道宽度或高度何时改变。

Item {
    id: my_item

    property double dimensions: width * height
    onDimensionsChanged: {
       if(my_item.visible)
           console.log("Dimension changed")
           // Some heavy processing logic to run which I want to run if dimension change is complete.
    }
}

问题:
有没有办法让我知道宽度或高度或尺寸更改何时完成或停止?由于我的代码内部原因,当 QML 项目的大小发生变化时,我必须进行繁重的处理。我想在尺寸更改完成后触发繁重的处理。有没有办法知道尺寸更改何时完成?

如果 Qt/QML 没有内置事件,智能 C++ 或 QML 技巧也可以作为答案吗?

最佳答案

可能有帮助的一件事是使用 Qt.callLater() 。这用于帮助减少对函数的冗余调用。它不会直接调用您的函数,而是发布一个事件。如果你连续多次使用 callLater() ,它仍然足够聪明,仍然只调用你的函数一次。尝试这样的事情:

Item {
    id: my_item

    property double dimensions: width * height
    onDimensionsChanged: {
       Qt.callLater(doHeavyProcessing);
    }

    function doHeavyProcessing() {
       // Some heavy processing logic to run which I want to run if dimension change is complete.
    }
}

关于qt - 如何检测 QML 项目的尺寸更改何时完成或停止?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70608938/

相关文章:

qt - 如何从 QML 文件获取 Qt 应用程序窗口大小,该文件不是声明根窗口的 QML?

c++ - 如何根据设置的 View 调整模型?

qt - 如何在 QtQuick 2.0 中创建滚动条?

c++ - 从源代码构建 QT 项目时出错

c++ - QT游戏中如何让子弹持续发射

python - 无法在 Windows 上的 PyQt 5 中导入 QtMultimedia

c++ - Qt:如何使半透明、无窗口、无边框的窗口可拖动?

ios - 在QML程序中在iOS上播放音频文件