3

QtQuick 2.0 (Qt 5) で ListModel を動的に埋めることにより、GridView を設定しようとしています。動作しますが、アプリケーションの起動が非常に遅くなります:

アプリケーション ウィンドウはすぐに表示されますが、水色の背景が表示されるまでに約 2 秒かかります。それまでは、デフォルトの灰色の背景が表示されます。

以下にコメントされている 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
    }
}
4

1 に答える 1

0

それは論点のようです。行のコメントを外したコードは、1 つの要素を持つリスト モデルを作成します。次に、onCompleted はリストからすべてのコンテンツを削除し、新しい要素に追加します。QML で静的な ListModel を定義するか、起動時に空のリスト モデルを用意する必要があるようです。

ListModel を変更し、そこに表示される要素があるたびに、さまざまなことが起こります。ListModel は内部構造を更新し、変更されたことを通知する必要があります。次に、グリッド ビューは、デリゲートを介して可視の ListElements を再レンダリングする必要があります。2 つの非常に迅速な変更 (クリアと追加) の行為である可能性があります。どちらも、これらすべてのアクションをそれぞれの後に実行する必要がありますが、起動時に多すぎます。GUI で使用できるスレッドは 1 つだけであることを忘れないでください。

于 2013-03-11T15:44:59.503 に答える