1

将列宽保存在 QTableView 中的标准做法是什么,该 QTableView 通过 QSortFilterProxyModel 隐藏/删除某些列(以任意顺序)?请注意,我说的是在单个实例中隐藏和取消隐藏它们。

我已经尝试了很多方法(都很难看)来实现它。我肯定做错了什么。

我查看了 QHeaderView::saveState() 和 QHeaderView::restoreState(),但除非我遗漏了什么,否则这实际上只适用于从关机到开始保存。一旦以不同的顺序隐藏和取消隐藏列,就会中断。

QSortFilterProxyModel 使用 filterAcceptsColumn() 可以正常工作。需要注意的是,当 filterAcceptsColumn() 在先前返回 false 的列上返回 true 时。我运行 invalidateFilter() 并将其绘制在 QTableView 中。但是,QTableView 对列宽使用了一些默认值(似乎是 100),而不是在 QSortFilterProxyModel 隐藏列之前的宽度。

想法?

4

1 回答 1

0

是的,setSectionHidden()改为使用。

通常,您应该尝试将与视图相关的代码(例如在运行时显示/隐藏列)保留在模型之外。在我们的应用程序中,我们有子类,QTableView它们QHeaderView允许用户使用上下文菜单显示/隐藏列;显示/隐藏列宽(以及位置)时不会触及它们。

filterAcceptsColumn可用于完全禁用主键、外键等列。

于 2013-03-27T08:45:14.157 回答