使用 Repeater 和 Delegate 的 QML,显示旧列表
QML using Repeater and Delegate, old list is shown
我正在使用 Repeater 和 Delegate 来显示列表,一切正常,但是当我清理模型时,GUI 不清理它,仍然显示旧列表。我将模型从 cpp 连接器传递到 qml。
我试过 update()、repaint() 但无济于事。
任何线索都会有所帮助。
Cpp 代码:
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 只有可见页面是 updated/repainted 而不是不可见页面。当不可见的页面变得可见时,它就会被绘制,在绘制新值之前您会短暂地看到旧值。每次创建新的QQuickWidget并添加到QStackedWidget。
我正在使用 Repeater 和 Delegate 来显示列表,一切正常,但是当我清理模型时,GUI 不清理它,仍然显示旧列表。我将模型从 cpp 连接器传递到 qml。 我试过 update()、repaint() 但无济于事。 任何线索都会有所帮助。
Cpp 代码:
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 只有可见页面是 updated/repainted 而不是不可见页面。当不可见的页面变得可见时,它就会被绘制,在绘制新值之前您会短暂地看到旧值。每次创建新的QQuickWidget并添加到QStackedWidget。