为QTableView寻找相当于“resizeRowToIndex”的函数

问题描述 投票:0回答:1

我正在使用

QTableView
,我希望该行更改其高度以适应所选索引的内容。

功能

resizeRowToContents
并不是我真正想要的。如果我单击不需要更改其高度来显示所有内容但行中的单元格 [B] 需要更改其高度的单元格 [A],则该行将增加其高度以容纳 [B]。

使用

sizeHintForRow
会导致与使用
resizeRowToContents

相同的行为

函数

sizeHintForIndex
由于某种原因没有返回正确的值。

在 Qt 的 C++ 源代码中,有一个私有函数

heightHintForIndex
这正是我所需要的(因为它被
resizeRowToContents
使用)。

是否有我缺少的功能,或者有人知道如何做到这一点?

我正在使用自己的

QStyledItemDelegate
来处理这些单元格。

python qtableview pyside6
1个回答
0
投票

基本上,我用 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)
© www.soinside.com 2019 - 2024. All rights reserved.