2014-03-05 131 views
1

我有一個父節點爲A,B,C的樹。每個節點都有子節點。我想只允許在一個父節點下的多個子節點的選擇。任何指針,我該如何使用QTreeview?只有一個父親QTreeview的子節點的多重選擇?

A-> D,E,F 
B-> G, H, I 
C-> J, K, L 

所以多個選擇應允許d,E,F或G,H,I,而不是爲了d,G,H構成。

謝謝

+2

看看'QAbstractItemView :: setSelectionMode()'函數。 – vahancho

+1

謝謝你的回覆。我已經這樣做了,但是這個選擇適用於整棵樹 – user1703942

+1

如果你使用模型,讓父節點的標誌不包含'Qt :: ItemIsSelectable'標誌。 – vahancho

回答

1

這裏有一種方法工作得很好。在爲您的視圖分配模型後,請掛接到selectionModel的已更改參數。

connect(treeView->selectionModel(), SIGNAL(selectionChanged(QItemSelection, QItemSelection)), SLOT(processSelection(QItemSelection, QItemSelection))); 

然後編寫一個函數,在每次改變時都會改變選擇,以便它符合您的要求。

void MyClass::processSelection(const QItemSelection& selected, const QItemSelection& deselected) 
{ 
    if (selected.empty()) 
     return; 

    QItemSelectionModel* selectionModel = treeView->selectionModel(); 

    QItemSelection selection = selectionModel->selection(); 
    const QModelIndex parent = treeView->currentIndex().parent(); 

    QItemSelection invalid; 

    Q_FOREACH(QModelIndex index, selection.indexes()) 
    { 
     if (index.parent() == parent) 
      continue; 

     invalid.select(index, index); 
    } 

    selectionModel->select(invalid, QItemSelectionModel::Deselect); 
} 

拖動整個大樹的大面積範圍時,我注意到一些很輕微放緩,但比它似乎運作良好等。

相關問題