注意,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++;
}
}