将激活的 QML TableView 行映射回 QModelIndex

Map QML TableView row on activated back to QModelIndex

我有一个 QML TableView,我在其中显示来自实现 QAbstractItemModel 的模型的一些数据。但是我没有直接使用它,而是将它包装在一个 QSortFilterProxyModel 中用于排序和过滤功能。

现在,如果我有一个经过严格过滤的视图并激活一行我想对激活的模型项目做些什么。但是 onActivated() 处理程序只给我单击的行号,但我认为我需要 QModelIndex 来查询项目的基础模型。我也无法实现类似 model.get(row) 的东西,因为模型现在已经将行映射到索引。

我弄清楚了它应该如何工作。您在自定义 qsortfilterproxymodel 中实现索引和数据,如下所示:

@pyqtSlot(int, int, result=QModelIndex)
@pyqtSlot(int, int, QModelIndex, result=QModelIndex)
def index(self, row, column, parent=QModelIndex()):
    return super().index(row, column, parent)

@pyqtSlot(QModelIndex, int, result=QVariant)
def data(self, index, role=Qt.DisplayRole):
    return super().data(index, role)

现在您可以拨打例如在 QML 中像这样

property var qt_UserRole: 256 // FIXME: Qt.UserRole is not exported
model.data(model.index(row, 0), qt_UserRole + 1)