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