Qt模型视图如何更新视图?

6

我有一个动态更新的模型,与视图无关。应该在视图上调用哪个方法来显示当前模型的数据?

示例:

StationListModel *model = new StationListModel(dynamic_list);
QListView *view = new QListView;
view->setModel(model);  //view set with empty model 
view->show();

在某个时间点上,通过套接字连接(与视图无关)向dynamic_list添加新条目。如何使用新数据填充视图?


有一个 QAbstractItemView::update(const QModelIndex & index)QAbstractItemViewQListView 的基类。 - TheMeaningfulEngineer
1个回答

8

模型必须通过发出信号来通知视图数据已更改。根据数据的确切更改方式选择适当的信号:

  • dataChanged 信号强制视图更新特定单元格,但不会创建或删除单元格。
  • layoutAboutToBeChangedlayoutChanged 信号强制视图更新所有内容。
  • 有关添加或删除行和列的信号将强制视图相应地更新。

1
这是内部视图实现。视图会自动连接到模型的信号,您无需考虑它。 - Pavel Strakhov
那么在设置 view->setModel(model); 后,视图应该在每次模型更改时自动更新(假设已发出 dataChangedlayoutChanged 信号)? - TheMeaningfulEngineer
是的,假设信号按正确的顺序和参数发出。 - Pavel Strakhov
4
@alan 实际上你不应该直接发出 layoutAboutToBeChanged 等信号,而是应该使用 beginInsertendInsert 和相应的函数,这些函数会自动发出必要的信号。 - ratchet freak
4
在执行view->setModel(model)之后,视图会在每次模型更改时更新自己,这就是模型-视图架构的全部意义。否则,它几乎没有任何用处。 - Kuba hasn't forgotten Monica
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接