【问题标题】:Repeater element in top level qml file causes binding loop in QtQuick 1.1 (QtCreator 3.5.1)顶级 qml 文件中的中继器元素导致 QtQuick 1.1 (QtCreator 3.5.1) 中的绑定循环
【发布时间】: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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2021-12-05
      • 1970-01-01
      • 1970-01-01
      • 2021-05-23
      • 2018-03-17
      • 2016-11-07
      • 2016-03-10
      • 2018-06-30
      • 2016-11-26
      相关资源
      最近更新 更多