Я пытаюсь реализовать архитектуру модель / представление в моей программе, но представление не обновляется после изменения модели, хотя я думаю, что это должно быть автоматически.
Вот упрощенная версия моего кода:
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. Но не буду. Зачем? Я думал, что вид будет автоматически обновляться после смены модели, но, похоже, это не так. У тебя есть идея?
Проблема в последней строке. model->stringList()
возвращает копия из QStringList
используется как модель, поэтому вы изменяете только копию, а та, что использовалась для модели, остается неизменной.
Используйте что-то вроде этого:
QStringList list = model->stringList();
list << "d";
model->setStringList(list);
Это будет работать, хотя setStringList()
вызовет полный, потенциально дорогой сброс модели. Тем не менее, кажется, что нет никакого способа обойти это с QStringListModel
,
Других решений пока нет …