加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – QTableView在模型刷新后保留选择

发布时间:2020-12-16 07:07:39 所属栏目:百科 来源:网络整理
导读:我尝试构建一个用户界面,显示表的内容,同时每秒刷新数据. 因此我有一系列模特: QSqlTableModel – 访问表格内容 MyModel – 继承自QIdentityProxyModel以稍微修改数据(source是TableModel) SomeFilterModels – 以MyModel作为源 该链以QTableView结尾.因为Q
我尝试构建一个用户界面,显示表的内容,同时每秒刷新数据.

因此我有一系列模特:

> QSqlTableModel – 访问表格内容
> MyModel – 继承自QIdentityProxyModel以稍微修改数据(source是TableModel)
> SomeFilterModels – 以MyModel作为源

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

>防止TableModel检测到更改.这不是很好.
>在模型之前和之后捕获一些事件即将更改为存储和恢复当前选择.遗憾的是,QIdentityProxyModel不会转发像modelAboutToBeReset或modelReset或dataChanged这样的信号.也不可能从MyModel重新发送这些信号,因为它们是私有的.

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

谁能给我一些提示?

提前致谢.

也许值得注意:

>一个QSqlTableModel用于许多TableView. (使用不同的FilterProxyModel链.)所以我不能只是停止刷新,因为一个View有一个选择.
>当我调用模型刷新方法时,您可能认为我知道.但是现在通过我的ui架构传递这个有点复杂.我的意思是模型已更新,并且TableView已通过某些ProxyModel连接到更新的模型.不应该有另一种沟通方式.

希望我的问题有道理.

解决方法

QAbstractItemModel包含许多信号,可以帮助您了解模型中的数据何时或将要更改.特别是,它有以下信号:

> dataChanged
> headerDataChanged
> modelAboutToBeReset
> modelReset
> columnsAboutToBeInserted
> columnsAboutToBeMoved
> columnsAboutToBeRemoved
> columnsInserted
> columnsMoved
> columnsRemoved
> rowsAboutToBeInserted
> rowsAboutToBeMoved
> rowsAboutToBeRemoved
> rowsInserted
> rowsMo??ved
> rowsRemoved

鉴于您丢失了选择,我假设粗体信号是您想要关注的信号,因为默认的Qt行为是保留选择,如果它们可以删除/插入列或行并且不影响选择.

一旦连接到这些信号,在modelAboutToBeReset我建议获取您可以重复使用的单元格的ID以再次选择它们,并在modelReset然后使用这些ID获取QModelIndexs并使用它们再次选择相同的单元格.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读