在 ToolBar 中使用 QML FileDialog 导致 "Binding loop"
Using QML FileDialog leads to "Binding loop" in ToolBar
我有一个我自己无法解决的问题。我使用这个第三方 library/framework - 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 项目中的演示可以很容易地重现该问题 - https://github.com/papyros/qml-material/tree/develop/demo。只需在某处添加 FileDialog,然后查看页面将如何加载以及您将收到什么消息。
使用的Qt版本:5.12.6
当 FileDialog
放入设置为 asynchronous
加载的 Loader
时,这是一个有点已知的问题。这是演示问题的完整示例:
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 but it has been closed as unresolved. My understanding of this problem is that the error only affects the "backup" QFileDialog
that only appears if an OS-specific one is not available. From the documentation:
The implementation of FileDialog will be a platform file dialog if possible. If that isn't possible, then it will try to instantiate a QFileDialog.
根据我的经验,在 Windows 和 Mac 上,绑定循环错误不会导致任何问题并且可以忽略,因为 OS 文件对话框总是出现。除了不使用 asynchronous
标志之外,我也不认为这是一个可纠正的错误,因为它是一个 Qt 错误。
我有一个我自己无法解决的问题。我使用这个第三方 library/framework - 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 项目中的演示可以很容易地重现该问题 - https://github.com/papyros/qml-material/tree/develop/demo。只需在某处添加 FileDialog,然后查看页面将如何加载以及您将收到什么消息。
使用的Qt版本:5.12.6
当 FileDialog
放入设置为 asynchronous
加载的 Loader
时,这是一个有点已知的问题。这是演示问题的完整示例:
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 but it has been closed as unresolved. My understanding of this problem is that the error only affects the "backup" QFileDialog
that only appears if an OS-specific one is not available. From the documentation:
The implementation of FileDialog will be a platform file dialog if possible. If that isn't possible, then it will try to instantiate a QFileDialog.
根据我的经验,在 Windows 和 Mac 上,绑定循环错误不会导致任何问题并且可以忽略,因为 OS 文件对话框总是出现。除了不使用 asynchronous
标志之外,我也不认为这是一个可纠正的错误,因为它是一个 Qt 错误。