在QTableView中更改默认行大小

6
如何将QTableView中的默认行大小更改为较小的值?我可以调用resizeRowsToContents(),但是随后插入的新行仍会以默认大小添加到末尾。
我猜这可能与样式表有关,但我对影响视觉更改的内容不太熟悉。
我在Python中使用PySide,但我认为这是一个普遍的Qt问题。
例子视图:
默认表外观。
调用resizeRowsToContents()后表格的外观。
现在,如果我在末尾添加一个新的空行。
该行使用默认行高度,并占用所有额外空间。

tableView.verticalHeader().setResizeMode(QHeaderView.ResizeToContents) 看起来效果不错,但它是动态的,在我进行大量实时更新时会减慢我的应用程序。我真的只想得到标准行高度。 :-( - Jason S
2
“标准”行高是指当您不调整大小以适应内容时所得到的高度。它基于行的大小提示,该提示源自项委托的大小提示(以及其他因素)。如果您不喜欢特定的高度,请将其更改为更可接受的值(例如 table.fontMetrics().height() + 6)。 - ekhumoro
我不太看出第二张和第三张图片之间有什么大的区别。 - Trilarion
请查看最后一个空白行(在“toves”下方)。 - Jason S
对于那些被Jason的评论困扰的人:所讨论的方法是setSectionResizeMode,而不是setResizeMode - Kuba hasn't forgotten Monica
1个回答

14

Qt::SizeHintRole 是负责单元格宽度和高度的角色。因此,您可以直接这样做:

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

或者只需要这样:

someView.verticalHeader().setDefaultSectionSize(10);

我认为setDefaultSectionSize正是你要找的。据我所知,没有其他简单的方法。

来自文档:

defaultSectionSize:int

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

如果你不知道需要多少像素,那么可以尝试在应用了resizeRowsToContents()rowHeight()后获取该高度。

因此,代码应该类似于:

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

嗯...但我不知道像素的数量。我只想让QTableView显示数据而不带有额外的空间。 - Jason S
@JasonS 在看了你的截图后,我发现行高是一样的,所以我修改了我的答案,如果数据不是非常复杂的话,应该可以工作。 - Jablonski

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接