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構成。
謝謝
我有一個父節點爲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構成。
謝謝
這裏有一種方法工作得很好。在爲您的視圖分配模型後,請掛接到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);
}
拖動整個大樹的大面積範圍時,我注意到一些很輕微放緩,但比它似乎運作良好等。
看看'QAbstractItemView :: setSelectionMode()'函數。 – vahancho
謝謝你的回覆。我已經這樣做了,但是這個選擇適用於整棵樹 – user1703942
如果你使用模型,讓父節點的標誌不包含'Qt :: ItemIsSelectable'標誌。 – vahancho