1

我有一个 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???我不能确定)

4

1 回答 1

1

根据对问题的评论。我没有解决原始代码失败的原因,但我发现这是可行的:

使用带有 QItemSelection 对象的 select() 版本,并使用将 ModelIndex 包装到我感兴趣的行的 QItemSelectRange 对象加载该对象。

于 2013-10-15T13:17:53.557 回答