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

时间:2015-11-25 23:24:40

标签: c++ qt qml qt-creator qt-quick

我一直试图在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,找不到任何相关问题。

1 个答案:

答案 0 :(得分:1)

我看不出你所显示的简单代码创建绑定循环的任何原因。如果分析器仅报告绑定循环,而不是应用程序在实际控制台输出中,我怀疑分析器确定绑定循环的方式是错误,而不是代码本身。