2012-01-12 25 views
1

我有三個元素的QListView:A,B,C選擇一個視圖。然後以編程方式選擇C:在共享QItemSelectionModel的QListView中的意外移位選擇

selectionModel.setCurrentIndex(idxC, ItemSelectionModel::NoUpdate); 
selectionModel.select(QItemSelection(idxC, idxC), QItemSelectionModel::ClearAndSelect); 

現在元件C被選擇並在視圖電流,不存在與A元素的任何標記。之後,我移動並單擊元素B,並在視圖中獲得A,B選擇,而不是預期的B,C。

任何想法如何處理這個?

這種情況可以在qt圖示例(http://developer.qt.nokia.com/doc/qt-4.8/itemviews-chart.html)中看到,其中兩個列表視圖共享相同的選擇模型:單擊第一個視圖,單擊第二個視圖,shift +單擊第一個視圖以獲得意外結果。

+0

您是否嘗試過簡單地點擊'項目C',然後按住Shift並點擊'項目B'? – Karlson 2012-01-12 16:06:26

+0

它的工作原理。在我的情況列表中有幾百個,通常從另一個視圖中選擇元素。重新選擇已選擇的元素以在列表視圖中進行組選擇是奇怪的。 – ronhartleyone 2012-01-12 17:18:45

回答

0

根據您所描述的行爲和一些代碼查看最好的我可以計算出的結果是QAbstractItemView根據鼠標按下事件進行選擇,基於之前的鼠標位置與當前在模型中選擇的index

要解決此問題,您可能必須子類QListView並重新實​​現mousePressEvent函數以更改行爲。相反,您可以在執行Item C選擇時簡單地設置鼠標位置。