使用fetch more时设置QTableView单元格大小?

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

我可以使用以下代码设置表格行的大小:

    table = QTableView()
    table.setModel(CustomModel(dataFrame))
    table.resizeRowsToContents()

当角色为 Qt.SizeHintRole 时,我的 CustomModel.data() 函数返回大小:

class CustomModel(QAbstractTableModel):

    [...]

    def data(self, index: QModelIndex, role=Qt.ItemDataRole):
        if not index.isValid():
            return None
        
        path = self._dataframe.iloc[index.row(), index.column()]
        pixmap = QPixmap(path)
        if role == Qt.SizeHintRole:
           return pixmap.size()

但是当我修改模型以便它可以获取更多项目时,如官方示例所示,不再考虑大小:

def setDataFrame(self, dataFrame: pd.DataFrame):
    self._dataframe = dataFrame
    self.beginResetModel()
    self._rowCount = 0
    self.endResetModel()
    return

def canFetchMore(self, parent=QModelIndex()) -> bool:
    return False if parent.isValid() else self._rowCount < len(self._dataframe)

def fetchMore(self, parent: QModelIndex | QPersistentModelIndex) -> None:
    if parent.isValid(): return

    remainder = len(self._dataframe) - self._rowCount
    itemsToFetch = min(100, remainder)

    if itemsToFetch <= 0: return

    self.beginInsertRows(QModelIndex(), self._rowCount, self._rowCount + itemsToFetch - 1)
    self._rowCount += itemsToFetch
    self.endInsertRows()

def rowCount(self, parent=QModelIndex()) -> int:
    return self._rowCount if parent == QModelIndex() else 0

当我更改

rowCount()
使其始终返回
len(self._dataframe)
时,大小会再次起作用(但“获取更多”功能会中断):

def rowCount(self, parent=QModelIndex()) -> int:
    return len(self._dataframe) if parent == QModelIndex() else 0

知道为什么会发生这种情况吗?

python qt qtableview qlistview qabstractitemmodel
1个回答
0
投票

正如 @musicamante 和 @relent95 所解释的,

resizeRowsToContents()
将来不会调整行的大小;所以每当插入新行时我都必须调用它。

添加

table.model().rowsInserted.connect(lambda: self.content.resizeRowsToContents())
解决了我的问题。

© www.soinside.com 2019 - 2024. All rights reserved.