0

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

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

4

1 回答 1

0

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

@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)
于 2016-05-18T05:39:37.260 回答