发布
社区首页 >问答首页 >使用QML FileDialog导致ToolBar中的“绑定循环”

使用QML FileDialog导致ToolBar中的“绑定循环”
EN

Stack Overflow用户
提问于 2021-10-18 06:44:19
回答 1查看 169关注 0票数 0

我有一个问题我一个人解决不了。我使用这个第三方库/框架- https://github.com/papyros/qml-material开发了一个UI。它的控制和布局是根据谷歌的指导方针开发的。问题是,当我在项目中使用FileDialog时,它在加载中定义的页面很慢,我得到以下消息:

代码语言:javascript
代码运行次数:0
复制
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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-29 17:07:49

当将FileDialog放在设置为asynchronous加载的Loader中时,这是一个已知的问题。下面是一个完整的示例,演示了这个问题:

代码语言:javascript
代码运行次数:0
复制
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行:

代码语言:javascript
代码运行次数:0
复制
                Loader {
                    id: example
                    anchors.fill: parent
                    asynchronous: true

我找到了一个错误报告,但由于未解决而关闭了它。我对这个问题的理解是,错误只影响只有在操作系统特定的QFileDialog不可用时才会出现的“备份”。来自文档

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69611761

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档