关于树节点的遍历

博客内容涉及QT界面的节点筛选逻辑,主要针对哨位、摄像机和组织节点。根据全局变量flagUseForSentryPost决定是否启用哨位筛选,若启用则隐藏所有节点并只显示匹配哨位ID的节点及其父节点和子节点;否则,全部显示。同时,根据变量falgUseForFilterQString进行文本筛选,显示包含指定文字的节点并隐藏其他节点。
摘要由CSDN通过智能技术生成

注意,lamda表达式,如果使用[=],其在生成的一刻,内部对应的全局变量转为局部变量,不会随全局活动。

bool flagUseForSentryPost=_sentryPostIDShown==""?false:true;
//用于标志是否开启哨位名关键词筛选的标志:
bool falgUseForFilterQString=!txt.isEmpty();
//用于判断是否为岗亭节点:
auto isSentryPost=[=](QTreeWidgetItemIterator item){return (*item)->text(2)=="sentrypost"?true:false;};
//用于判断是否为摄像机节点:
auto isCamera=[=](QTreeWidgetItemIterator item){return (*item)->text(1)=="camera"?true:false;};
//用于判断是否为组织节点:
auto isOrg=[=](QTreeWidgetItemIterator item){return (*item)->text(2)=="org"?true:false;};

QTreeWidgetItemIterator it(this);
//如果筛选指定哨位:
if(flagUseForSentryPost)
{
    //一开始全部隐藏:
    while(*it)
    {
        (*it)->setHidden(true);
        it++;
    }

    //将迭代器指针置头
    it=QTreeWidgetItemIterator(this);
    while(*it)
    {
        //如果当前节点为哨位节点且符合id要求
        if(isSentryPost(it)&&_sentryPostIDShown==(*it)->text(5))
        {
            //显示其所有父节点
            (*it)->setHidden(false);
            this->parentVisible(*it);
            //再显示其所有的孩子节点:
            for(int i=0;i<(*it)->childCount();i++)
            {
                (*it)->child(i)->setHidden(false);
            }
        }
        it++;
    }
}
else//不筛选指定哨位直接全显
{
    while(*it)
    {
        (*it)->setHidden(false);
        it++;
    }
}
//下面加入文字筛选:如果哨位名筛选启动:
if(falgUseForFilterQString)
{
    //对多有目前显示节点进行遍历
    it=QTreeWidgetItemIterator(this,QTreeWidgetItemIterator::IteratorFlag::NotHidden);
    QString str;
    while(*it)
    {
        str=(*it)->text(0);
        //如果该节点包含指定名:
        if(str.indexOf(txt)!=-1)
        {
            //显示其所有父节点
            this->parentVisible(*it);
        }
        else//隐藏该节点
        {
            (*it)->setHidden(true);
        }
        it++;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

颢师傅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值