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

时间:2013-03-09 14:07:55

标签: gridview qml qt5 qt-quick qtquick2

我试图通过在QtQuick 2.0(Qt 5)中动态填充ListMode来填充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
    }
}

1 个答案:

答案 0 :(得分:0)

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

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