qt - QML 使用中继器和委托,显示旧列表
问题描述
我正在使用Repeater和Delegate来显示一个列表,一切正常,但是当我清理模型时,GUI没有清理它,仍然显示旧列表。我将模型从 cpp 连接器传递给 qml。我试过更新(),重绘()但无济于事。任何线索都会有所帮助。
cp代码:
void ModelCpp::clearMessage() {
qDeleteAll(messageList);
messageList.clear();
emit messageListUpdated();
}
QML
ColumnLayout {
spacing: 1
Repeater{
model: modelCpp.messageList
delegate: Rectangle {
visible: true
color: colorBoxShader
Layout.preferredWidth: 100
Layout.preferredHeight: 20
RowLayout{
anchors.fill: parent
Text {
text: modelData.label
Layout.alignment: Qt.AlignLeft
Layout.leftMargin: layoutLeftMargin
color: "white"
font.bold: true
...
```
编辑:
我缩小到 QStackedWidget,我正在使用 QStackedWidget 加载不同的页面。在一个屏幕上很清楚,但现在我注意到它在所有屏幕上都发生了。直到 qml 页面不是当前页面,它才会更新并且具有旧值。当页面不是当前页面时,如何在后台重新渲染页面。
解决方案
我弄清楚了这个问题。使用 QStackedWidget 仅更新/重绘可见页面,而不是不可见页面。当不可见页面变得可见时,它会被绘制,并且您将在绘制新值之前短暂地看到旧值。每次创建新的 QQuickWidget 并将其添加到 QStackedWidget。
推荐阅读
- c - 将条件语句定义为变量
- c# - 嵌套异步导致 HttpContext Null
- python - 从 URL 内容中拆分文本
- java - Android GPS 定位未发现问题。如何更正此代码
- powershell - 连接 Select-Object 语句中的两个属性
- python - ansible 动态库存错误
- sql-server - Microsoft SQL Server 外键依赖项使用 sp_MSdependencies 显示,但未在 sys.foreign_keys 中列出
- google-compute-engine - Google Cloud Bigtable 的性能调优技巧
- python - 我怎样才能获得访问令牌?OAuth1与指令参数不兼容
- javascript - 在原生 DOM 中,有没有办法将两个节点组合起来形成一个查询范围?