【发布时间】:2020-10-02 15:31:59
【问题描述】:
我正在使用Repeater 和Delegate 来显示一个列表,一切正常,但是当我清理模型时,GUI 没有清理它,仍然显示旧列表。我将模型从 cpp 连接器传递给 qml。 我试过更新(),重绘()但无济于事。 任何线索都会有所帮助。
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 页面不是当前页面,它才会更新并且具有旧值。当页面不是当前页面时,如何在后台重新渲染页面。
【问题讨论】:
-
是否将
messageListUpdated声明为messageList属性的NOTIFY信号? -
是的@JarMan
Q_PROPERTY(QList<QObject*> messageList READ getMessageList NOTIFY messageListChanged) -
所以你的
NOTIFY是messageListChanged,但是你的clearMessage函数发出messageListUpdated。是不是打错字了? -
啊不,这里是错字。
Q_PROPERTY(QList<QObject*> messageList READ getMessageList NOTIFY messageListUpdated) -
如果你没有发出
messageListChanged,那么QML就不会知道模型已经改变了。