我有一个 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 | 当前,或切换 | 当前,我只在循环结束时选择了 match_set 中的最后一项。随着循环的执行,选择从一项更改为另一项,而不是将新行添加到选择的集合中。我希望这是有道理的。
我确信 SelectCurrent 标志是这样做的方法,但它对我不起作用。有什么建议么?(python 2.6.7、Fedora 14、Qt4.4???我不能确定)