gpt4 book ai didi

c++ - 顶级 qml 文件中的 Repeater 元素导致 QtQuick 1.1 (QtCreator 3.5.1) 中的绑定(bind)循环

转载 作者:太空狗 更新时间:2023-10-29 23:00:22 27 4
gpt4 key购买 nike

我一直在尝试在工作中的 Qt 4.8.4 (QtQuick 1.1) 应用程序中追踪一些绑定(bind)循环。我做了一些实验,发现以下基本示例导致 QtCreator 3.5.1 中的 QML 分析器检测到绑定(bind)循环:

import QtQuick 1.1

Rectangle {
Repeater {
model: 1000
Text { text: "I'm item " + index }
}
}

如果我将 Repeater 元素移到另一个名为 Multiple.qml 的 qml 文件中,其中包含:

import QtQuick 1.1

Repeater {
model: 1000
Text { text: "I'm item " + index }
}

并将我的 main.qml 更改为以下内容,绑定(bind)循环消失了:

import QtQuick 1.1

Rectangle {
Multiple {}
}

1000 次迭代不是一个现实的例子。我用它来扩大 QML Profiler 中的一些时间增量。任何数量的迭代都会出现此问题 >= 1。

Analyzer 事件输出还声称“create”已被调用 top main.qml 1001 次(Repeater 迭代次数 + 1),但是使用 massif 的分析似乎表明当绑定(bind)循环时内存使用量不会增加被检测到。根据分析器的输出,它似乎正在消耗额外的时间。在我的机器上,main.qml 创建时间为 71 毫秒对 124 毫秒。

我做了一些进一步的实验。如果我将 Repeater 元素放入另一个 QML 文件并使用主 qml 文件中的 Qt.creatComponent("MyComp.qml"和 <component>.createObject() 对其进行实例化,我还会得到一个绑定(bind)循环。如果 MyComp.qml 使用 Multiple {},绑定(bind)循环消失了。

我还尝试了更新版本的 Qt 5.5.0 - 同样的问题。

这是预期的行为吗?这可能是 QtCreator 本身的错误吗?我搜索了 QtCreator Jira,但找不到任何相关问题。

最佳答案

我看不出有任何理由可以通过您显示的简单代码创建绑定(bind)循环。如果绑定(bind)循环只是由分析器报告,而不是在应用程序的实际控制台输出中,我怀疑这是分析器确定绑定(bind)循环的方式的错误,而不是代码本身的错误。

关于c++ - 顶级 qml 文件中的 Repeater 元素导致 QtQuick 1.1 (QtCreator 3.5.1) 中的绑定(bind)循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33928167/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com