gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 04:04:22 29 4
gpt4 key购买 nike

我试图通过在 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
}
}

最佳答案

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

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

关于gridview - 动态填充 GridView 时应用程序启动缓慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15311591/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com