使用 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。