我正在使用
QTableView
,我希望该行更改其高度以适应所选索引的内容。
功能
resizeRowToContents
并不是我真正想要的。如果我单击不需要更改其高度来显示所有内容但行中的单元格 [B] 需要更改其高度的单元格 [A],则该行将增加其高度以容纳 [B]。
使用
sizeHintForRow
会导致与使用 resizeRowToContents
相同的行为
函数
sizeHintForIndex
由于某种原因没有返回正确的值。
在 Qt 的 C++ 源代码中,有一个私有函数
heightHintForIndex
这正是我所需要的(因为它被 resizeRowToContents
使用)。
是否有我缺少的功能,或者有人知道如何做到这一点?
我正在使用自己的
QStyledItemDelegate
来处理这些单元格。
基本上,我用 Python 编写了函数
heightHintForIndex
。
def on_selection_changed(self, selected: QModelIndex , deselected: QModelIndex):
self.setRowHeight(deselected.row(), 1)
editor = self.indexWidget(selected)
hint = 0
if (editor is not None) and (self.isPersistentEditorOpen(selected)):
hint = max(hint, editor.sizeHint().height())
min_ = editor.minimumSize().height()
max_ = editor.maximumSize().height()
hint = max(min_, min(max_, hint))
option = QStyleOptionViewItem()
self.initViewItemOption(option)
option.rect.setY(self.rowViewportPosition(selected.row()))
height = self.rowHeight(selected.row())
if height == 0:
height = 1
option.rect.setHeight(self.rowHeight(selected.row()))
option.rect.setX(self.columnViewportPosition(selected.column()))
option.rect.setWidth(self.columnWidth(selected.column()))
if self.showGrid():
option.rect.setWidth(option.rect.width() - 1)
new_height = max(hint, self.itemDelegateForIndex(selected).sizeHint(option, selected).height())
self.setRowHeight(selected.row(), new_height)