美文网首页
标准项模型QStandardItemModel类的使用

标准项模型QStandardItemModel类的使用

作者: 寒冰豌豆 | 来源:发表于2017-02-24 10:42 被阅读0次

    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

    相关文章

      网友评论

          本文标题:标准项模型QStandardItemModel类的使用

          本文链接:https://www.haomeiwen.com/subject/dxymittx.html