Я реализую GUI для программы python с использованием Qt5 и PySide2. У меня нет проблем с пониманием стороны Qt на C ++, поэтому не стесняйтесь указывать на ссылки Qt, не связанные с python.
У меня есть некоторые данные, которые я отображаю в QTableView
с использованием подкласса QAbstractTableModel
. Я также использую подкласс QSortFilterProxyModel
для фильтрации своей таблицы и отображения только подмножества базовых данных, потому что это очень большой набор данных. Я предлагаю пользователю возможность отображать только часть этих данных в соответствии с некоторыми критериями. Все это работает очень хорошо.
Затем я настроил QTableView
так, чтобы пользователь мог выбирать только полные строки:
self.ui.candidatesTable.setSelectionBehavior(QTableView.SelectRows)
И в объекте, обрабатывающем пользовательский интерфейс, я реализовал слот, который вызывается при изменении выбора в таблице:
@Slot(QItemSelection)
def handleSelectionChanged(self, item):
hasSelection = self.ui.candidatesTable.selectionModel().hasSelection()
if hasSelection:
selectedRows = self.ui.candidatesTable.selectionModel().selectedRows()
for row in selectedRows:
print(row.row())
Моя проблема заключается в том, что значение, напечатанное print(row.row())
, показывает индекс строки в отображаемых в данный момент строках . Если пользователь выбрал критерий фильтрации, который отображает только 5 строк из нескольких тысяч, а затем выбрал первую строку, print(row.row())
вернет 0
, а не исходный индекс в базовом QAbstractTableModel
.
Поэтому у меня следующий вопрос: как я могу получить доступ к исходному индексу в этой ситуации?