我试图通过在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
}
}
答案 0 :(得分:0)
这似乎是一个有争议的问题。取消注释行的代码将创建一个包含一个元素的列表模型。然后,您的onCompleted将从列表中删除所有内容并附加到新元素中。看起来您应该在QML中定义静态ListModel,或者在启动时应该有一个空列表模型。
每次更改ListModel并且它具有可见的元素时,会发生许多事情。 ListModel需要更新其内部结构,然后发出信号已更改。然后您的网格视图需要通过委托重新呈现可见的ListElements。这可能是两个非常快速的变化(清楚和附加)的行为。这两个都需要在每个操作之后执行所有这些操作,这在启动时太多了。请记住,你只有一个线程可用于gui。