更改模型后视图未更新

View isn't updated after changing model

本文关键字:更新 后视图 模型      更新时间:2023-10-16

我试图在我的程序中实现一个模型/视图体系结构,但在更改模型后视图没有更新,尽管我认为它应该自动更新。

这是我代码的简化版本:

QStringListModel *model = new QStringListModel;
QListView *view = new QListView;
view->setModel(model);
QStringList list;
list << "a" << "b" << "c";
model->setStringList(list);
model->stringList() << "d";

问题是,我的观点只包含a、b和c,但没有d。为什么?我原以为视图会在更改模型后自动更新,但事实并非如此。你有主意吗?

问题出在最后一行。model->stringList()返回用作模型的QStringList副本,因此您只修改副本,用于模型的副本保持不变。

使用类似的东西:

QStringList list = model->stringList();
list << "d";
model->setStringList(list);

尽管setStringList()将导致一个完整的、潜在的昂贵的模型重置,但这将起作用。然而,QStringListModel似乎没有办法解决这个问题。