QSortFilterProxyModel打破了columnWidths

时间:2013-03-27 06:40:18

标签: qt qtableview qheaderview

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

我尝试了很多方法(都很难看)。当然我做错了。

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

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

想法?

1 个答案:

答案 0 :(得分:0)

是的,请改用setSectionHidden()

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

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