首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QTableView在模型刷新后保留选择

QTableView在模型刷新后保留选择
EN

Stack Overflow用户
提问于 2014-02-06 07:57:51
回答 1查看 2.5K关注 0票数 5

我试图构建一个用户界面,它在每秒钟刷新数据时显示表的内容。

因此,我有一系列的模型:

  • QSqlTableModel -访问表内容
  • MyModel -从QIdentityProxyModel继承来稍微修改数据(源是TableModel)
  • SomeFilterModels --以MyModel为源

这条链以QTableView结尾。因为QSqlTableModel每秒钟刷新一次,所以TableView中的任何选择也会每秒钟删除一次。现在我有两个想法来解决这个问题。

  1. 防止TableModel检测更改。效果不太好。
  2. 捕捉模型之前和之后触发的一些事件将发生更改,以存储和恢复当前选择。可悲的是,QIdentityProxyModel没有转发像modelAboutToBeReset、modelReset或dataChanged这样的信号。从MyModel重新发送这些信号也是不可能的,因为它们是私有的。

我正在寻找其他方法来解决这些刷新问题,但没有成功。但我无法想象,我是第一个使用代理模型链,并结合定期模型刷新和选择的人。

有人能给我一些提示吗?

提前谢谢。

也许值得注意的是:

  • 一个QSqlTableModel用于多个TableViews。(使用不同的FilterProxyModel链。)所以我不能停止刷新,因为一个视图有一个选择。
  • 您可能会认为,当我调用模型刷新方法时,我知道。但就目前而言,通过我的ui体系结构来传递这个问题有点复杂。我的意思是,模型是更新的,TableView已经通过一些ProxyModels连接到更新的模型。不应该需要另一种沟通方式。

希望我的问题有意义。

EN

回答 1

Stack Overflow用户

发布于 2014-02-17 16:06:44

QAbstractItemModel包含了许多信号,这些信号可以帮助您了解模型中的数据何时正在或将要发生变化。特别是,它具有以下信号:

  • dataChanged
  • headerDataChanged
  • modelAboutToBeReset
  • modelReset
  • columnsAboutToBeInserted
  • columnsAboutToBeMoved
  • columnsAboutToBeRemoved
  • columnsInserted
  • columnsMoved
  • columnsRemoved
  • rowsAboutToBeInserted
  • rowsAboutToBeMoved
  • rowsAboutToBeRemoved
  • rowsInserted
  • rowsMoved
  • rowsRemoved

假设您丢失了选择,我假设粗体信号就是您想要关注的信号,因为默认的Qt行为是保留选择(如果可以的话)--在删除/插入列或行时,它不会影响所选内容。

一旦连接到这些信号,在modelAboutToBeReset中,我建议为可以重用的单元获取I,以便再次选择它们;在modelReset中,建议使用这些I来获取QModelIndex,并使用它们再次选择相同的单元格。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21597091

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档