【发布时间】:2013-03-27 06:40:17
【问题描述】:
在通过 QSortFilterProxyModel(以任意顺序)隐藏/删除某些列的 QTableView 中保存列宽的标准做法是什么?请注意,我说的是在单个实例中隐藏和取消隐藏它们。
我已经尝试了很多方法(都是丑陋的)来实现它。我肯定做错了什么。
我查看了 QHeaderView::saveState() 和 QHeaderView::restoreState(),但除非我遗漏了什么,否则这实际上只适用于从关机到启动保存。一旦以不同的顺序隐藏和取消隐藏列,就会中断。
QSortFilterProxyModel 使用 filterAcceptsColumn() 可以正常工作。需要注意的是,当 filterAcceptsColumn() 在先前返回 false 的列上返回 true 时。我运行 invalidateFilter() 并将其绘制在 QTableView 中。但是,QTableView 对列宽使用了一些默认值(似乎是 100),而不是在 QSortFilterProxyModel 隐藏列之前的宽度。
想法?
【问题讨论】:
-
对于这样的控制,只使用 QHeaderView::setSectionHidden() 并一起取消 QSortFilterProxy 是否更聪明?我开始但认为有点太麻烦的另一个解决方案是保留某种类型的“真实索引”容器,而不是 QHeaderView 认为的索引。
标签: qt qtableview qheaderview