QTableView“ResizeToContents”列太宽,启用排序

Posted

技术标签:

【中文标题】QTableView“ResizeToContents”列太宽,启用排序【英文标题】:QTableView "ResizeToContents" columns are too wide with sorting enabled 【发布时间】:2012-09-24 21:21:23 【问题描述】:

我有两个相同的 QTableView,其中一个是可排序的。这两个表的最后四列的大小调整模式设置为 QHeaderView::ResizeToContents。

不可排序的表格列宽看起来是正确的,列标题的左右边缘只有几个像素的填充。但是可排序表的列宽在列标题的左右边缘增加了大约 30 个像素,使得它们比需要的宽得多。

除了单行 setSortingEnabled(bool) 之外,这些表及其模型的构造是相同的。

这是设计使然,还是有办法从可排序表中删除所有这些额外的填充?

【问题讨论】:

【参考方案1】:

额外填充的原因是由于需要QHeaderView 来绘制排序指示符。因此,如果您希望有一个关于表格当前排序状态的可见指示符,那么我建议您将额外的填充留在那里。否则,您可以执行以下操作:

table->setSortingEnabled( true );
table->horizontalHeader()->setSortIndicatorShown( false );

请注意,这些函数调用的顺序很重要。

还可以继承 QHeaderView 并覆盖虚拟 sectionSizeFromContents() 函数并对其进行自定义以满足您的特定需求。

【讨论】:

我对排序指示器需要填充也有同样的想法。但是,指示器绘制在文本上方的中心,而不是侧面(至少,对于这种特定的外观)。谢谢你的建议。 更新了另一个潜在解决方案的答案。

以上是关于QTableView“ResizeToContents”列太宽,启用排序的主要内容,如果未能解决你的问题,请参考以下文章

如何更改 QTableView 边框颜色?

QTableView - 排序标题

QTableView如何设置行高?

PyQt5 组件之QTableView

如何在调整 QTableView 大小时动态更改列数?

QTableView - 没有得到选择改变信号