QTreeView

1.如何对树节点增删改查?

一、如何对树节点增删改查?

1.创建树视图和数据模型

//为了展示方便,创建的都是临时局部变量,实际使用时一般为类成员变量
QStandardItemModel *model = new QStandardItemModel();
QTreeView *view = new QTreeView(this);
view->setModel(model);
view->show();

2.添加根节点

QStandardItem* itemRoot = m_model->invisibleRootItem();
QStandardItem* item0 = new QStandardItem;
item0->setText("item0");
itemRoot->appendRow(item0);
//记录当前选中节点
QStandardItem* itemCurrent = item0;
//设置新节点为点击选中状态
ui.treeView->setCurrentIndex(m_model->indexFromItem(item0));

3.添加子节点

if (itemCurrent == nullptr)
    itemCurrent = itemRoot;

QStandardItem* item = new QStandardItem;
item->setText("item");
itemCurrent->appendRow(item);
//展开添加的子节点
ui.treeView->expand(m_model->indexFromItem(itemCurrent));

4.删除当前选中节点

if (itemCurrent == nullptr)
    return;

QModelIndex index = m_model->indexFromItem(itemCurrent);
//是否有子节点
if (m_model->hasChildren(index))
{
    int childCount = m_model->rowCount(index);
    for (int i = 0; i < childCount; i++)
    {
        QModelIndex childIndex = m_model->index(i, 0, index);
        m_model->removeRow(childIndex.row(), index);
    }
}
//删除当前选中节点
m_model->removeRow(index.row(), index.parent());
//重新获取当前选中的节点
itemCurrent = m_model->itemFromIndex(ui.treeView->currentIndex());

5.更新当前节点(通过手动点击触发)

connect(m_view, &QTreeView::clicked, [=](const QModelIndex& index) {
        itemCurrent = m_model->itemFromIndex(index);
    });

持续更新中。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值