问题描述
我正在使用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。