更改 QTableView 中的默认行大小

Posted

技术标签:

【中文标题】更改 QTableView 中的默认行大小【英文标题】:changing the default row size in a QTableView 【发布时间】:2014-12-18 16:59:01 【问题描述】:

如何以使其更小?我可以调用resizeRowsToContents(),但随后的插入仍会在末尾添加新行,这是默认大小。

我猜这可能与样式表有关,但我对影响视觉变化的因素还不够熟悉。

我在 Python 中使用 PySide,但我认为这是一个普遍的 Qt 问题。


示例视图:

默认表格外观

resizeRowsToContents() 之后的表格是什么样子的:

现在如果我在末尾添加一个新的空白行:

该死的,它使用默认的行高,还有所有额外的空间。

【问题讨论】:

tableView.verticalHeader().setResizeMode(QHeaderView.ResizeToContents) 似乎工作得很好,但是当我进行大量实时更新时,它是动态的并且会减慢我的应用程序。我真的只想获得标准的行大小。 :-( “标准”行高是您不根据内容调整大小时得到的。它基于行的大小提示,该提示源自项目委托的大小提示(以及其他内容)。如果您不喜欢该特定高度,只需将其更改为更可接受的高度(例如table.fontMetrics().height() + 6)。 不知何故,我看不出第二张和第三张图片有很大的区别。 查看最后一个空白行(“toves”下方) 对于任何被 Jason 的评论难倒的人:有问题的方法是 setSectionResizeMode,而不是 setResizeMode 【参考方案1】:

Qt::SizeHintRole负责单元格的宽度和高度。所以你可以:

someModel.setData(someIndex,QSize(width, height), Qt::SizeHintRole);

或者只是这样:

someView.verticalHeader().setDefaultSectionSize(10);

我认为setDefaultSectionSize 正是您要找的。 AFAIK 没有其他简单的方法。

From doc:

defaultSectionSize : int

此属性保存之前标题部分的默认大小 调整大小。此属性仅影响具有 Interactive 或固定为他们的调整大小模式。

如果你不知道你需要多少像素,那么在应用resizeRowsToContents()rowHeight() 之后尝试得到这个高度

所以应该是这样的:

resizeRowsToContents();
someView.verticalHeader().setDefaultSectionSize(someView.rowHeight(0));

【讨论】:

嗯...但我不知道像素数。我只想让 QTableView 显示数据而不需要额外的空间。 @JasonS 在你的截图之后我可以看到,那行高度是一样的,所以我编辑了我的答案,如果数据不是很复杂,它应该可以工作。

以上是关于更改 QTableView 中的默认行大小的主要内容,如果未能解决你的问题,请参考以下文章

如何更改 QTableView 图像大小

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

如何在保持程序化行选择的同时防止用户点击行选择?

QTableWidget

使用 QStandardItemModel 更改 QTableView 的行颜色

QT:怎么设置QTableView默认序号的大小