QTreeWidget删除部分复选框所选子节点

  点击两个删除按钮后 

创建父节点,子节点的语法就不再阐述

//创建item  根节点root
void ScreenWnd::creatItem(const QString &type, const QString &name)
{

    //查找表中 根节点是否存在    匹配根节点 名字 匹配标志 列
    QList<QTreeWidgetItem *> rootItems = treeWidget->findItems(type, Qt::MatchContains, 0);
    if(rootItems.isEmpty())
    {   //根节点不存在 创建根节点
        QTreeWidgetItem *topItem = new QTreeWidgetItem(treeWidget);
        topItem->setText(0, type);
        topItem->setCheckState(0, Qt::Checked);  //勾选框
        treeWidget->addTopLevelItem(topItem);   //顶端的节点

        // 编辑和删除按钮  设置图片大小 按钮背景透明 放入二三列
        QPushButton *topEditBtn = new QPushButton(this);
        QPushButton *topDeleteBtn = new QPushButton(this);
        topEditBtn->setIcon(QIcon(":/res/edit.png"));
        topEditBtn->setIconSize(QSize(30, 30));
        topDeleteBtn->setIcon(QIcon(":/res/delete.png"));
        topDeleteBtn->setIconSize(QSize(30, 30));
        topEditBtn->setStyleSheet("background-color:transparent");
        topDeleteBtn->setStyleSheet("background-color:transparent");

        treeWidget->setItemWidget(topItem, 1, topEditBtn);  //顶层
        treeWidget->setItemWidget(topItem, 2, topDeleteBtn);   //顶层

        rootItemMap.insert(type, topItem);  //map存放根节点

        connect(topDeleteBtn, &QPushButton::clicked, this, [=]()
        {
            removeMultipleRow();    //点击根节点同一行的删除按钮 删除选中子节点
        });
    }   
}

当点击根节点的时候,判断根节点的复选框状态

如果为半选状态 删除此根节点下已经勾选的子节点

如果为全选状态 删除此根节点下所有的子节点 并包含此根节点

//父节点删除按钮 删除多行
void ScreenWnd::removeMultipleRow()
{
    QTreeWidgetItem *currentItem = treeWidget->currentItem();   //当前的父类item
    if(currentItem == NULL)
        return ;

    childrenItemMap.clear();    //每次清空列表


    //将勾选子节点的item 全部放入map容器
    if(currentItem->checkState(0) == Qt::Checked)
    {   //删除父节点 以及该节点下的所有子节点
        for(int i=0; i<currentItem->childCount(); i++)
        {
            index = currentItem->child(i)->text(3).toInt(); //第四列的序号
            childrenItemMap.insert(currentItem->child(i), index);
        }
    }
    else if(currentItem->checkState(0) == Qt::PartiallyChecked)
    {   //只删除父节点下的部分节点,  有父节点就要用父节点的takeChild删除子节点
        for(int i=0; i<currentItem->childCount(); i++)
        {
            if(currentItem->child(i)->checkState(0) == Qt::Checked)
            {
                index = currentItem->child(i)->text(3).toInt(); //第四列的序号
                childrenItemMap.insert(currentItem->child(i), index);
            }
        }
    }


    //删除 子节点的item
    for(QMap<QTreeWidgetItem *, int>::iterator it = childrenItemMap.begin(); it != childrenItemMap.end(); it++)
    { 
        delete it.key();   //遍历 delete 删除子节点
    }
  

    //如果为全选 删除 父节点
    if(currentItem->checkState(0) == Qt::Checked)
    {
        delete treeWidget->takeTopLevelItem(treeWidget->currentIndex().row());
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值