我们利用QStandardItem建立QStandardItemModel类型树形数据结构时,并不会保存QStandardItem类指针对象,因而会有一个问题:当我们想要获得树形结构中特定的某项的QStandardItem指针时,该如做?
这会涉及几个函数,一个函数用于在创建树形结构时做标记,另外两个函数用于检索:
创建树:
QStandardItemModel * model = new QStandardItemModel(this);
QStandardItem * item = model->invisibleRootItem();//获取根节点
//创建一级目录: a
QStandardItem * name = new QStandardItem("a");
name->setToolTip("a");//做标记
item->appendRow(name);//给item建立分支节点
//创建二级目录: a,b
QStandardItem * item1 = new QStandardItem(QString("a"));
item1->setToolTip("a/a");//按照树形结构分支,以目录形式设置标记,这样标记具有唯一性。
name->appendRow(item1);
QStandardItem * item2 = new QStandardItem(QString("b"));
item2->setToolTip("a/b");
name->appendRow(item2);
//创建三级目录:a
QStandardItem * item3 = new QStandardItem(QString("a"));
item3->setToolTip("a/a/a");
item1->appendRow(item3);
树形结构中有三个名称为“a”的项,这里的方法是获取所有项名称为“a”的QStandardItem项,然后一一对比它们的标记,直到找到我们所需要的那个分支下的项:
//枚举参数“Qt::MatchExactly | Qt::MatchRecursive”表示以项名称、全树进行搜索
QList<QStandardItem *> list = model->findItems("a", Qt::MatchExactly | Qt::MatchRecursive);
for(int i = 0; i < list.size(); ++i)
{
if(list[i]->toolTip() == "a/a")//查找标记为a/a的项
;//这里list[i]即为树形分支a/a对应的QStandardItem指针
}
因篇幅问题不能全部显示,请点此查看更多更全内容