QT中树形图怎么在展开另一个节点时收缩上一个节点
时间: 2024-05-13 18:14:35 浏览: 110
在Qt中,可以通过使用QTreeView和QStandardItemModel来实现树形图。要实现在展开另一个节点时收缩上一个节点,可以通过连接QTreeView的collapsed()和expanded()信号来实现。具体步骤如下:
1. 创建QTreeView和QStandardItemModel对象。
```
QTreeView *treeView = new QTreeView(this);
QStandardItemModel *model = new QStandardItemModel(this);
```
2. 设置QTreeView的模型。
```
treeView->setModel(model);
```
3. 添加树形图节点。
```
QStandardItem *rootItem = model->invisibleRootItem();
QStandardItem *item1 = new QStandardItem("Item 1");
rootItem->appendRow(item1);
QStandardItem *item2 = new QStandardItem("Item 2");
rootItem->appendRow(item2);
```
4. 连接QTreeView的collapsed()和expanded()信号。
```
connect(treeView, SIGNAL(collapsed(const QModelIndex &)), this, SLOT(onCollapsed(const QModelIndex &)));
connect(treeView, SIGNAL(expanded(const QModelIndex &)), this, SLOT(onExpanded(const QModelIndex &)));
```
5. 在槽函数中实现节点的展开和收缩。
```
void MainWindow::onCollapsed(const QModelIndex &index)
{
QTreeView *treeView = qobject_cast<QTreeView *>(sender());
if (treeView) {
QModelIndex parentIndex = index.parent();
if (parentIndex.isValid()) {
treeView->collapse(parentIndex);
}
}
}
void MainWindow::onExpanded(const QModelIndex &index)
{
QTreeView *treeView = qobject_cast<QTreeView *>(sender());
if (treeView) {
QModelIndex parentIndex = index.parent();
if (parentIndex.isValid()) {
treeView->collapse(parentIndex);
}
}
}
```
在这个示例中,当节点展开时,会将其上一个节点收缩。这里使用了collapse()函数来实现节点的收缩。
阅读全文