使用中继器和代理的QML,显示旧列表

问题描述

我正在使用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,只有可见页面被更新/重新绘制,而不是不可见页面。当看不见的页面变为可见时,它就会被绘制,您将在绘制新值之前短暂地看到旧值。每次创建新的QQuickWidget并将其添加到QStackedWidget。