У меня есть QTableView, который создается таким образом:PyQT QTableView выбрать несмежный набор строк
self.preset_delegate = PresetDelegate() # used to provide a combobox for making a selection from a set of options, column 0
self.model_filelist = QtGui.QStandardItemModel()
self.model_filelist.setHorizontalHeaderLabels(HEADER_LABELS)
self.list_filelist = QtGui.QTableView()
self.list_filelist.horizontalHeader().setResizeMode(QtGui.QHeaderView.Interactive)
self.list_filelist.setItemDelegateForColumn(0, self.preset_delegate)
self.list_filelist.setModel(self.model_filelist)
self.list_filelist.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection)
Когда пользователь нажимает кнопку, я хотел бы алгоритмический выбрать строки из таблицы. Выбор не будет смежным. Для целей нашего обсуждения это может быть любое случайное подмножество строк в модели/таблице.
Это псевдо-код для того, что я использую, чтобы сделать выбор:
files = [str(self.model_filelist.data(self.model_filelist.index(x,1)).toString()) for x in range(self.model_filelist.rowCount())]
self.list_filelist.clearSelection()
for x in match_set:
match_index = files.index(x)
model_index = self.model_filelist.index(match_index,1) # first column is okay
self.list_filelist.selectionModel().select(model_index, QtGui.QItemSelectionModel.Select | QtGui.QItemSelectionModel.Current)
Моя проблема заключается в выборе модели с флагом на самой последней строке. Я использую SelectCurrent, ToggleCurrent или Select | Текущий или Toggle | Текущий, я получаю только последний элемент в моем match_set, оставшемся выбранным в конце цикла. По мере выполнения цикла выбор изменен с одного элемента на другой, вместо добавления новой строки в набор выбора. Я надеюсь, что в этом есть смысл.
Я точно знал, что флаг SelectCurrent - это способ сделать это, но он не работает для меня. Какие-либо предложения? (python 2.6.7, Fedora 14, Qt4.4. Я не могу быть уверен)
Я не думаю, что я когда-либо пробыл 18 часов, когда никто не предлагал. Я изменил код, чтобы использовать функцию select(), которая принимает QItemSelection, и я загружаю ItemSelection с помощью набора объектов ItemSelectionRange, которые обертывают интересующие меня индексы модели. Кажется, это работает. –
Если у вас есть решение, вы можете ответить на свой вопрос и принять его. Поощряется даже, есть значок для этого! –
@Lego, хорошо, сделаю. –