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

动态填充GridView时应用程序启动缓慢,gridview,qml,qt5,qt-quick,qtquick2,Gridview,Qml,Qt5,Qt Quick,Qtquick2,我试图通过在QTQuick2.0(Qt5)中动态填充ListModel来填充GridView。 它可以工作,但应用程序启动非常缓慢: 应用程序窗口立即出现,但淡蓝色背景显示大约需要2秒钟。在此之前,我会看到默认的灰色背景 如果我取消注释下面注释的两行,应用程序将立即启动。但我不喜欢这种黑客行为,因为我不明白它为什么有效 有人知道会出什么问题吗 谢谢 import QtQuick 2.0 Rectangle { width: 1024; height: 600 color: "l

我试图通过在QTQuick2.0(Qt5)中动态填充ListModel来填充GridView。 它可以工作,但应用程序启动非常缓慢:

应用程序窗口立即出现,但淡蓝色背景显示大约需要2秒钟。在此之前,我会看到默认的灰色背景

如果我取消注释下面注释的两行,应用程序将立即启动。但我不喜欢这种黑客行为,因为我不明白它为什么有效

有人知道会出什么问题吗

谢谢

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
    }
}

这似乎是一个没有实际意义的问题。未注释行的代码创建了一个包含一个元素的列表模型。然后,onCompleted将从列表中删除所有内容并附加到新元素中。看起来您应该在QML中定义一个静态列表模型,或者在启动时应该有一个空列表模型


每次更改ListModel时,如果它有可见的元素,就会发生很多事情。ListModel需要更新其内部结构,然后发出已更改的信号。然后网格视图需要通过委托重新呈现可见列表元素。这可能是两个非常快速的更改(清除和追加)的行为。这两种方法都需要在每次启动后执行所有这些操作,这在启动时太多了。记住,gui只有一个线程可用

如何填充模型?通过多个
append
调用?是的,但是即使只有一个append调用,它也会被复制,就像上面的代码一样。要复制,请创建一个新的QtQuick 2.0项目,并将代码复制粘贴到main.qml中。奇怪的是,我的代码中没有注释的行工作正常。因此,这与似乎合乎逻辑的情况正好相反。:)