2011-08-03 28 views
6

我仍在努力使用QListView,我試圖在視圖中選擇一個特定的行,我無法弄清楚如何做到這一點。如何選擇QListView中的行

我在StackOverflow上發現了一個類似的問題,它推薦使用模型的createIndex()方法,但是這種方法是受保護的(也許它曾經是公開的,但不再是),所以這對我不起作用。任何建議?

回答

15

您可以通過只調用

QModelIndex indexOfTheCellIWant = model->index(row, column, parentIndex); 

得到任何索引然後就可以調用setCurrentIndex(indexOfTheCellIWant)

如果模型只包含一個標準的項目列表而不是樹結構,那麼它就更容易了。因爲我們可以假設該項目是一個根項目 - 沒有父項目。

QModelIndex indexOfTheCellIWant = model->index(row, column); 

採用樹形結構是有點麻煩,因爲我們不能只指定行和列,我們需要對於父母指定這些。如果您需要了解這部分,請告訴我,我會解釋更多。

只有一件事要注意。選擇是基於單元格,而不是真正的行。所以如果你想確保當用戶選擇一個單元格(或者你通過代碼完成)整個行被選中,你可以通過設置它自己的「selectionBehavior」來實現。

list->setSelectionBehavior(QAbstractItemView::SelectRows); 
+0

下劃線只會使代碼難以閱讀。 – 2015-01-10 19:44:32

2

布魯諾在他回答說,你可以使用QAbstractItemView::setCurrentIndex (const QModelIndex & index)

+0

謝謝,我不知道這種方法。目前還不清楚我應該如何選擇一個行。在文檔上,它使用createIndex()編寫,但由於它是受保護的方法,因此我無法使用它。 QModelIndex的構造函數不讓我指定一行。有沒有其他方法? –