更改 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 中的默认行大小的主要内容,如果未能解决你的问题,请参考以下文章