2013-10-08 31 views
1

我有一個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 |當前或切換|目前,我只能得到我的match_set中最後一項在循環結束時保持選中狀態。循環執行時,選擇從一個項目更改爲另一個項目,而不是將新行添加到選擇集。我希望這是有道理的。

我確信SelectCurrent標誌是這樣做的方式,但它不適用於我。有什麼建議麼? (python 2.6.7,Fedora 14,Qt4.4 ???我不能確定)

+0

我不認爲我曾經18個小時沒有人有任何建議。我重構了代碼以使用接受QItemSelection的select()函數,並使用一組包含感興趣的模型索引的ItemSelectionRange對象加載ItemSelection。這似乎工作。 –

+0

如果你想出了一個解決方案,你可以回答自己的問題,並接受它。甚至鼓勵,有這樣做的徽章! – 2013-10-10 02:16:09

+0

@樂高,好的,我會做的。 –

回答

1

根據對問題的評論。我沒有解決,爲什麼原來的代碼失敗了,但我發現這工作:

使用,需要一個QItemSelection對象的選擇()版本,並加載的對象與對象QItemSelectRange那套ModelIndex到我行感興趣。