【问题标题】:QML - Create ListModel dynamically (JAVASCRIPT issue)QML - 动态创建 ListModel(JAVASCRIPT 问题)
【发布时间】:2017-07-09 18:36:58
【问题描述】:

这是我的代码,它有效!

ListModel {
    id: idValueList

    Component.onCompleted: {

        for (var i = 0; i < 21; i++) {
            append(createListElement(i));
        }
    }

    function createListElement(id) {
        return {
            myId: id + 1, myValue: ""
        };
    }
}

但是,我需要将 for 循环中的“21”替换为来自 XmlListModel 的 myXmlListModel.get(myXmlListModel.count - 1).myValue,动态列表模型停止工作!

有趣的是代码

Text{
    x:0 ; y:0
    text: myXmlListModel.get(myXmlListModel.count - 1).myValue;
}

为我打印的正好是 21。但如果我在 for 循环中使用表达式 myXmlListModel.get(myXmlListModel.count - 1).myValue,则没有任何效果。

这怎么可能??

【问题讨论】:

    标签: javascript qt qml


    【解决方案1】:

    原因应该很容易理解:

    Component.onCompleted: [...]
    

    在组件完成的特定时间点执行。 这不一定是myXmlListModel 的内容可用的时间点。它可能已经创建,但可能仍然是空的。因此当

    Component.onCompleted: [...]
    

    在您的ListModel 被执行时,myXmlListModel.count 确实仍然是0,而在之后立即更改为 21 - 所以在您阅读 Text 时它已经有正确的数量。

    因此,您应该填写ListModel 的时间点不是在完成时,而是在内容准备好后,因此您可以处理:

    myXmlListModel.onCompleted
    

    myXmlListModel.onCountChanged
    

    (对于后者,您应该考虑先在您的ListModel 上调用clear()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多