蚂蚁power的个人主页

http://www.qtcn.org/bbs/u/163171  [收藏] [复制]

蚂蚁power

  • 6

    关注

  • 2

    粉丝

  • 22

    访客

  • 等级:新手上路
  • 总积分:74
  • 男,2011-06-12

最后登录:2018-06-06

更多资料

日志

QtreeWidget实现父节点选中时子节点全部选中(三种状态)

2015-10-13 18:38
//纯手打 会有拼写错误 请谅解
Qtreewidget *tree =new Qtreewidget; //初始化一个控件
connect(tree, SIGNAL(itemChanged(QTreeWidgetItem*, int)), this,SLOT(slottreeItemChanged(QTreeWidgetItem*, int)));//绑定信号
//选中项改变
void ShowJH_All::slottreeItemChanged(QTreeWidgetItem * item, int)
{
    //如果当前项是选中状态
    if(Qt::Checked == item->checkState(0))
    {
        int count = item->childCount();
        //如果当前选中项是父节点那么count > 0
        if(count > 0)
        {
            //将父节点下的子节点设为选中状态
            for(int i = 0; i < count; i++)
            {
                item->child(i)->setCheckState(0, Qt::Checked);
            }
        }
        else
        {
            updateParentItem(item);
        }
    }
    //如果当前项是未选中状态
    else if(Qt::Unchecked == item->checkState(0))
    {
        int count = item->childCount();
        if(count > 0)
        {
            //将父节点的所有子节点设为不选中
            for(int i = 0; i < count; i++)
            {
                item->child(i)->setCheckState(0, Qt::Unchecked);
            }
        }
        else
        {
            updateParentItem(item);
        }
    }
}
//选中或者取消选中子节点时的处理
void ShowJH_All::updateParentItem(QTreeWidgetItem* item)
{
    QTreeWidgetItem *parent = item->parent();
    //如果当前节点就是父节点那么则返回
    if(parent == NULL)
    {
        return;
    }
    //选中的子节点个数
    int selectedCount = 0;
    int childCount = parent->childCount();
    for(int i = 0; i < childCount; i++)
    {
        QTreeWidgetItem *childItem = parent->child(i);
        if(childItem->checkState(0) == Qt::Checked)
        {
            selectedCount++;
        }
    }
    if(selectedCount <= 0)
    {
        //选中状态
        parent->setCheckState(0, Qt::Unchecked);
    }
    else if(selectedCount > 0 && selectedCount < childCount)
    {
        parent->setCheckState(0, Qt::PartiallyChecked);
    }
    else if(selectedCount == childCount)
    {
        //未选中状态
        parent->setCheckState(0, Qt::Checked);
    }
}

//全选
void ShowJH_All::on_selectAllradio_clicked()
{
    if(ui->tabWidget->currentIndex()==0)
    {
        QList<QCheckBox *> checkbox = ui->scrollArea->findChildren<QCheckBox *>();
        for(int i = 0;i<checkbox.count();i++)
        {
            if(!checkbox.at(i)->isChecked())
            {
                checkbox.at(i)->setChecked(true);
            }
        }
    }
    else
    {
        //遍历所有的节点
        for(int i = 0;i<ui->treeWidget->topLevelItemCount();i++)
        {
            //得到当前的节点指针
            QTreeWidgetItem *pLeve1 = ui->treeWidget->topLevelItem(i);
            for(int j = 0;j<pLeve1->childCount();j++)
            {
                QTreeWidgetItem *pLeve2 = pLeve1->child(j);
                //判断当前节点是否选中
                if(Qt::Checked != pLeve2->checkState(0))
                {
                    pLeve2->setCheckState(0, Qt::Checked);
                }
            }
        }
    }
}
//反选
void ShowJH_All::on_UnselectAllRadio_clicked()
{
    if(ui->tabWidget->currentIndex()==0)
    {
        QList<QCheckBox *> checkbox = ui->scrollArea->findChildren<QCheckBox *>();
        for(int i = 0;i<checkbox.count();i++)
        {
            if(!checkbox.at(i)->isChecked())
            {
                checkbox.at(i)->setChecked(true);
            }
            else
            {
                checkbox.at(i)->setChecked(false);
            }
        }
    }
    else
    {
        //遍历所有的节点
        for(int i = 0;i<ui->treeWidget->topLevelItemCount();i++)
        {
            //得到当前的节点指针
            QTreeWidgetItem *pLeve1 = ui->treeWidget->topLevelItem(i);
            for(int j = 0;j<pLeve1->childCount();j++)
            {
                QTreeWidgetItem *pLeve2 = pLeve1->child(j);
                //判断当前节点是否选中
                if(Qt::Checked != pLeve2->checkState(0))
                {
                    pLeve2->setCheckState(0, Qt::Checked);
                }
                else
                {
                    pLeve2->setCheckState(0, Qt::Unchecked);
                }
            }
        }
    }
}
分类:默认分类|回复:0|浏览:1697|全站可见|转载
 

Powered by phpwind v8.7 Certificate Copyright Time now is:05-17 22:07
©2005-2016 QTCN开发网 版权所有 Gzip disabled