【发布时间】:2016-02-28 22:21:00
【问题描述】:
我一直试图在工作中的 Qt 4.8.4 (QtQuick 1.1) 应用程序中追踪一些绑定循环。我做了一些实验,发现以下基本示例导致 QtCreator 3.5.1 中的 QML Analyzer 检测到绑定循环:
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 更改为以下内容,绑定循环消失:
import QtQuick 1.1
Rectangle {
Multiple {}
}
1000 次迭代不是一个现实的例子。我用它来扩展 QML Profiler 中的一些时间增量。任何迭代次数 >= 1 都会出现此问题。
Analyzer 事件输出还声称已为顶部 main.qml 调用了 1001 次“create”(Repeater 迭代次数 + 1),但是使用 massif 的分析似乎表明绑定循环时内存使用量不会增加被检测到。根据分析器的输出,它似乎占用了额外的时间。在我的机器上,main.qml 创建时间是 71 毫秒 vs 124 毫秒。
我做了一些进一步的实验。如果我将 Repeater 元素放入另一个 QML 文件并使用主 qml 文件中的 Qt.creatComponent("MyComp.qml" 和 <component>.createObject() 实例化它,我也会得到一个绑定循环。如果 MyComp.qml 使用 Multiple {},绑定循环消失了。
我还尝试了更新版本的 Qt 5.5.0 - 同样的问题。
这是预期的行为吗?会不会是 QtCreator 本身的错误?我通过 QtCreator Jira 进行了搜索,但找不到任何相关问题。
【问题讨论】:
标签: c++ qt qml qt-creator qt-quick