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

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

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

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


示例视图:

默认表格外观

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

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

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

【问题讨论】:

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

标签: python qt pyside qtableview


【解决方案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 在你的截图之后我可以看到,那行高度是一样的,所以我编辑了我的答案,如果数据不是很复杂,它应该可以工作。
猜你喜欢
  • 2016-05-26
  • 2017-01-23
  • 2013-02-01
  • 2012-09-15
  • 1970-01-01
  • 2012-06-12
  • 2017-11-22
  • 2015-03-20
  • 1970-01-01
相关资源
最近更新 更多