我有一个 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???我不能确定)
最佳答案
根据对问题的评论。我没有解决原始代码失败的原因,但我发现这是可行的:
使用采用 QItemSelection 对象的 select() 版本,并使用将 ModelIndex 包装到我感兴趣的行的 QItemSelectRange 对象加载该对象。
关于python - pyQt QTableView 选择一组不连续的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19256543/