动态填充GridView时,应用程序启动缓慢



我试图通过动态填充QtQuick 2.0 (Qt 5)中的ListModel来填充GridView。它可以工作,但是应用程序启动非常慢:

应用程序窗口立即出现,但需要大约2秒才能出现浅蓝色背景。在此之前,我看到一个默认的灰色背景。

如果我取消下面注释的两行,应用程序立即启动。但是我不喜欢这个hack,因为我不明白为什么它能工作。

有谁知道哪里出了问题吗?

谢谢!

import QtQuick 2.0
Rectangle {
    width: 1024; height: 600
    color: "lightblue"
    Component.onCompleted: {
        //moviesModel.clear()
        moviesModel.append({ "movieNumber": 1 })
    }
    ListModel {
        id: moviesModel
        //ListElement { movieNumber: 0 }
    }
    Component {
        id: moviesComponent
        Rectangle {
            width: grid.cellWidth
            height: grid.cellHeight
            Text {
                anchors.centerIn: parent
                text: movieNumber
            }
        }
    }
    GridView {
        id: grid
        anchors.fill: parent
        cellWidth: 100
        cellHeight: 200
        model: moviesModel
        delegate: moviesComponent
    }
}

这似乎是一个有争议的问题。不加注释的代码创建了一个包含一个元素的List Model。然后你的onCompleted从列表中删除所有内容,并添加一个新元素。看起来你应该在QML中定义一个静态的ListModel,或者你应该在启动时有一个空的列表模型。

每当你改变一个ListModel并且它有可见的元素时,就会发生很多事情。ListModel需要更新它的内部结构,然后发出改变的信号。然后你的网格视图需要通过委托重新呈现可见的listelement。这可能是两个非常快速的变化(清除和追加)的行为。这两者都需要在每个操作之后执行所有这些操作,这在启动时太多了。请记住,您只有一个线程可用于gui。

相关内容

  • 没有找到相关文章

最新更新