Я пытаюсь создать список с флажками, который проверяет выбранные поля при нажатии клавиши ввода/возврата. Я делаю это с переопределением фильтра событий для моего MainWindow (да, я должен создать подкласс, но я не мог заставить это работать)
В фильтре событий я получаю значение None, возвращаемое методом itemFromIndex, хотя я только что без проблем передал индекс через .isValid(). Очевидно, я что-то упускаю, но я не могу понять - он смотрит на совершенно другие индексы? модель не обновляется?
Любые советы по альтернативным подходам приветствуются
Это метод, который я использую для заполнения модели (QStandardItemModel) элементами, он вызывается только при загрузке файла.
def update_siNLV(self,names,model):
model.clear()
for name in names:
item = Qg.QStandardItem(name)
item.setCheckState(Qc.Qt.Unchecked)
item.setCheckable(True)
model.appendRow(item)
Это из метода init, где я создаю переменную для модели выбора и устанавливаю фильтр событий в моем QListView.
self.sigInSelection = self.siNLV.selectionModel()
self.siNLV.installEventFilter(self)
Метод eventFilter выглядит так, и фильтрующая часть метода работает (я заставил его печатать выбранные индексы нажатием клавиши ввода)
def eventFilter(self,receiver,event):
if event.type() == QtCore.QEvent.KeyPress:
if event.key() == QtCore.Qt.Key_Return or event.key() == Qc.Qt.Key_Enter:
indexes = self.sigInSelection.selectedIndexes()
for index in indexes:
if index.isValid():
print(str(index.row())+" "+str(index.column()))
item = self.sigInModel.itemFromIndex(index)
item.setCheckState(qtCore.Qt.Checked)
return True
return super(form,self).eventFilter(receiver,event)
index
является допустимым индексом вsigInSelection
- нет априорной причины, по которой он также должен быть допустимым индексом вsigInModel
. - person Martin Bonner supports Monica   schedule 02.09.2016sigInModel
настроен на просмотр списка, он не использует общие индексы со встроенной моделью выбораsiNLV
? Тогда как мне связать выборки с моими данными? - person Bertramp   schedule 02.09.2016itemFromIndex
, так как вы говорите, чтоeventFilter
работает. Вероятно, нам нужно увидеть немного больше кода. MVCE может помочь. - person strubbly   schedule 02.09.2016itemFromIndex
часть фильтра событий, которая не работает - person Bertramp   schedule 02.09.2016index
здесь — это строка и столбец, которые вы уже печатаете, аindex.model()
. Убедитесь, что оно имеет ожидаемое значение (т. е. должно равнятьсяsigInModel
). Если все эти три значения верны, тоitemFromindex
должен работать. - person strubbly   schedule 02.09.2016QSortFilterProxyModel
, что, я думаю, имеет смысл, поскольку я применил его кsiNLV
, но совершенно забыл об этом. Я думаю, мне нужно использовать функциюmapToSource
, чтобы получить индексы модели предметов? - person Bertramp   schedule 02.09.2016