【问题标题】:Using QML FileDialog leads to "Binding loop" in ToolBar使用 QML FileDialog 会导致工具栏中的“绑定循环”
【发布时间】:2021-12-05 06:06:29
【问题描述】:

我有一个自己无法解决的问题。我使用这个第三方库/框架 - https://github.com/papyros/qml-material 开发了一个 UI。它具有根据 Google 指南开发的控件和布局。问题是当我在项目中使用 FileDialog 时,它定义的页面加载缓慢,我收到以下消息:

file:///C:/.../QtQuick/Controls/ToolBar.qml:146:9: QML QQuickItem*: Binding loop detected for property "layoutHeight"
file:///C:/.../QtQuick/Dialogs/DefaultFileDialog.qml:407:9: QML ToolBar: Binding loop detected for property "implicitHeight"
file:///C:/.../QtQuick/Dialogs/DefaultFileDialog.qml:407:9: QML ToolBar: Binding loop detected for property "implicitHeight"

如果有人知道答案,那就太好了。

可以使用库的 GitHub 项目中的 Demo - https://github.com/papyros/qml-material/tree/develop/demo 轻松重现该问题。只需在某处添加 FileDialog 并查看页面将如何加载以及您将收到什么消息。

使用的Qt版本:5.12.6

【问题讨论】:

  • 你有一个“最小”的例子(见minimal reproducible example)来演示这个问题吗?我宁愿不下载整个庞大的项目。
  • 我正要建议在那个 GitHub 项目中提出一个问题,但我注意到你已经这样做了:FileDialog doesn't work properly. #496 ????
  • @JarMan 会很棒,但问题是,如果没有整个项目,它就不可能成为成功的例子。没有项目,它就可以工作。

标签: qt user-interface qml qt5


【解决方案1】:

这是 FileDialogs 在放入设置为 asynchronous 加载的 Loaders 时的一个众所周知的问题。这是一个演示问题的完整示例:

import QtQuick.Window 2.12
import QtQuick.Dialogs 1.3

Window {
    id: root
    visible: true
    width: 640
    height: 480

    Loader {
        sourceComponent: FileDialog {}
        asynchronous: true // change to false and ToolBar binding loop goes away
    }
}

我注意到您引用的项目在 main.qml 中使用了异步加载器,因此这似乎导致了您的问题。见第 243 行:

                Loader {
                    id: example
                    anchors.fill: parent
                    asynchronous: true

我找到了one bug report,但它已因未解决而被关闭。我对这个问题的理解是,该错误仅影响“备份”QFileDialog,仅在特定于操作系统的备份不可用时才会出现。来自documentation

如果可能的话,FileDialog 的实现将是一个平台文件对话框。如果这不可能,那么它将尝试实例化一个 QFileDialog。

根据我的经验,在 Windows 和 Mac 上,绑定循环错误不会导致任何问题,并且可以忽略,因为操作系统文件对话框总是出现。除了不使用 asynchronous 标志之外,我也不认为这是一个可纠正的错误,因为它是一个 Qt 错误。

【讨论】:

  • 非常感谢!感谢您调查整个项目只是为了帮助我解决我的问题。似乎这就是问题所在。一旦我将这些对话框移出加载程序,它就可以正常工作!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多