标准项模型QStandardItemModel类的使用

QStandardItemModel类提供了一个通用的模型来存储自定义的数据。

可以使用模型索引来访问模型中的项目,但是需要指定其行号、列号和父模型索引。当要访问顶层项目时,父模型索引可以使用QModelIndex来表示。如下:

    QModelIndex indexA = model.index(0,0,QModelIndex());

由其函数申明可知,第三个函数参数可以省略,当要访问顶层项目时,可以省略

QModelIndex index (int row, int column, const QModelIndex & parent = QModelIndex() )
main.cpp
#include <QApplication>
#include <QTreeView>
#include <QDebug>
#include <QStandardItem>

int main(int argc, char *argv[])
{
    QApplication app(argc,argv);

    //创建标准模型项
    QStandardItemModel model;

    //获取模型项的根项,根项是不可见的
    QStandardItem *parentItem = model.invisibleRootItem();

    //创建标准项item0,并设置显示文本,图标和工具提示
    QStandardItem *item0 = new QStandardItem ;
    item0 ->setText("A");
    QPixmap pixmap0(50,50);
    pixmap0.fill("red");
    item0 ->setIcon(QIcon(pixmap0));
    item0->setToolTip("indexA");
    //将创建的标准项,作为根项的子项
    parentItem ->appendRow(item0);

    //将创建的标准项作为新的父项
    parentItem = item0;

    //创建新的标准项item2,使用另一种方法来设置显示文本,图标和工具提示
    QStandardItem *item1 = new QStandardItem ;
    item1 ->setText("B");
    QPixmap pixmap1(50,50);
    pixmap1.fill("blue");
    item1 ->setIcon(QIcon(pixmap1));
    item1->setToolTip("indexB");
    //将创建的标准项,作为根项的子项
    parentItem ->appendRow(item1);

    //创建新的标准项item1,他将作为item0的子项
    QStandardItem *item2 = new QStandardItem ;
    item2 ->setText("B");
    QPixmap pixmap2(50,50);
    pixmap2.fill("cyan");
    item2 -> setData("C",Qt::EditRole);
    item2 -> setData("indexC",Qt::ToolTipRole);
    item2 -> setData(QIcon(pixmap2),Qt::DecorationRole);
    //将创建的标准项,作为根项的子项
    parentItem ->appendRow(item2);

    //在树中显示model
    QTreeView view;
    view.setModel(&model);
    view.show();

    //获取item0的索引并输出item0的子项数目,然后输出了item的显示文本和工具提示
    QModelIndex indexA = model.index(0,0,QModelIndex());
    qDebug()<<"indexA row count"<<model.rowCount(indexA);

    //indexB在indexA的子项中排在row=0,所以第一个参数为0;
    QModelIndex indexB = model.index(0,0,indexA);
    qDebug()<<"indexB text :"<<model.data(indexB,Qt::EditRole).toString();
    qDebug()<<"indexB toolTip :"<<model.data(indexB,Qt::ToolTipRole).toString();

    //indexB在indexA的子项中排在row=1,所以第一个参数为1;
    QModelIndex indexC = model.index(1,0,indexA);
    qDebug()<<"indexC text :"<<model.data(indexC,Qt::EditRole).toString();
    qDebug()<<"indexC toolTip :"<<model.data(indexC,Qt::ToolTipRole).toString();
    qDebug()<<"indexC toolTip :"<<model.data(indexC,Qt::DecorationRole);

    return app.exec();

}

运行图片:

运行图片.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.项目经验 2.基础问题 3.指南认识 4.解决思路 ios开发三大块: 1.Oc基础 2.CocoaTouch...
    阳光的大男孩儿阅读 10,474评论 0 13
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,773评论 19 139
  • 前言 人生苦多,快来 Kotlin ,快速学习Kotlin! 什么是Kotlin? Kotlin 是种静态类型编程...
    任半生嚣狂阅读 26,445评论 9 118
  • 每有锥心寂寥时,但愁天涯两不知, 推窗明月满,入户笙歌迟, 费尽尺素难成诗! 长恨时光不似水,似水光阴不念痴。 芙...
    岁月奈我何阅读 3,751评论 0 0
  • 在中国普通群众所能接触到的理财产品有: 1.股票、基金、债券、P2P 2.私募、专户理财、外汇、期货 3.黄金、收...
    镜花奇缘阅读 4,640评论 1 2