我一直试图在Qt 4.8.4(QtQuick 1.1)应用程序中跟踪一些绑定循环。我做了一些实验,发现以下基本示例结果是QtCreator 3.5.1中的QML分析器检测到的绑定循环:
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事件输出还声称已经为top main.qml调用了“create”1001次(Repeater迭代次数+ 1),但是使用massif的分析似乎表明当绑定循环时内存使用不会增加被检测到。根据分析仪输出,它似乎占用了额外的时间。在我的机器上,main.qml创建为71毫秒vs 124毫秒。
我做了一些进一步的实验。如果我将Repeater元素放入另一个QML文件并使用Qt.creatComponent(主要qml文件中的“MyComp.qml”和<component>.createObject()
)实例化它,我也会得到一个绑定循环。如果MyComp.qml使用Multiple {}相反,绑定循环消失了。
我也尝试过更新版本的Qt 5.5.0 - 同样的问题。
这是预期的行为吗?这可能是QtCreator本身的一个错误吗?我搜索了QtCreator Jira,找不到任何相关问题。
答案 0 :(得分:1)
我看不出你所显示的简单代码创建绑定循环的任何原因。如果分析器仅报告绑定循环,而不是应用程序在实际控制台输出中,我怀疑分析器确定绑定循环的方式是错误,而不是代码本身。