使用QStandardItemModel创建子节点
以QTreeView为例子,创建子节点可以为:
QStandardItemModel *goodsModel = new QStandardItemModel(0, 1,this); goodsModel->setHeaderData(0, Qt::Horizontal, tr("No"));//标题栏 ui->treeView->setModel(goodsModel); ui->treeView->setEditTriggers(QAbstractItemView::NoEditTriggers);//设置每行内容不可更改 // QList<QStandardItem *> childItems;//放置子节点的容器 /*创建各个父节点*/ QStandardItem *item1 = new QStandardItem(QIcon(":/new/prefix1/find.png"), QString(tr("云宏信息"))); QStandardItem *item2 = new QStandardItem(QIcon(":/new/prefix1/cut.png"), QString(tr("销售中心"))); QStandardItem *item3 = new QStandardItem(QIcon(":/new/prefix1/copy.png"), QString(tr("研发中心"))); QStandardItem *item4 = new QStandardItem(QIcon(":/new/prefix1/asave.png"), QString(tr("开发"))); goodsModel->appendRow(item1); goodsModel->appendRow(item2); goodsModel->appendRow(item3); goodsModel->appendRow(item4); // /*把子节点放到childItems容器中*/ // childItems.push_back(item1_1); // childItems.push_back(item1_2); // childItems.push_back(item1_3); // childItems.push_back(item1_4); // item1->appendRows(childItems); // childItems.clear();//清除容器,以便下次使用 // QStandardItem *item2 = new QStandardItem(QString(tr("群组"))); // goodsModel->appendRow(item2); // /*创建各个子节点*/ // QStandardItem *item2_1 = new QStandardItem(QIcon(":/new/prefix1/undo.png"), QString(tr("知库群"))); // QStandardItem *item2_2 = new QStandardItem(QIcon(":/new/prefix1/editor.png"), QString(tr("知库意见收集群"))); // /*把子节点放到childItems容器中*/ // childItems.push_back(item2_1); // childItems.push_back(item2_2); // item2->appendRows(childItems); // childItems.clear(); ui->treeView->expandAll();
返回QStandardItemModel下所有item的内容代码:
QList<QStandardItem*> YunFile::returnTheItems() { return goodsModel->findItems("*", Qt::MatchWildcard | Qt::MatchRecursive); } void YunFile::iterateOverItems() { QList<QStandardItem*> list = returnTheItems(); foreach(QStandardItem* item, list) { qDebug()<<item->text(); // QModelIndex index = item->index(); // qDebug()<<index.internalPointer(); } }
PS:这都是使用Qt自带的模型绑定数据,开发过程中更多的则是自定义一个模型,不过QStandardItemModel还是可以作为测试数据来使用