【问题标题】:Qt Model-View update view?Qt Model-View 更新视图?
【发布时间】:2013-11-11 11:47:30
【问题描述】:

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

例子:

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

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

【问题讨论】:

  • 有一个QAbstractItemView::update(const QModelIndex & index)QAbstractItemViewQListView 的基类

标签: qt view


【解决方案1】:

模型必须在其数据发生变化时发出信号通知视图。根据数据的准确变化情况选择适当的信号:

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

【讨论】:

  • 视图上有哪些槽可以捕捉到它们?
  • 内部视图实现。视图自动连接到模型的信号。你不需要考虑它。
  • 所以在设置view->setModel(model); 之后,视图应该在每次模型更改时自行更新(假设dataChangedlayoutChanged emmited)?
  • @alan 实际上你不应该直接发出 layoutAboutToBeChanged 和朋友,而是使用 beginInsertendInsert 和家人,这会反过来发出必要的信号
  • @alan: 所以设置完view->setModel(model);视图应在每次模型更改时自行更新 这就是模型视图架构的重点。否则它几乎没用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-09
  • 2013-09-21
  • 1970-01-01
  • 2012-11-01
相关资源
最近更新 更多