QStandardItemModel類提供了一個(gè)通用的模型來存儲自定義的數(shù)據(jù)沥割。
可以使用模型索引來訪問模型中的項(xiàng)目,但是需要指定其行號岳守、列號和父模型索引汇鞭。當(dāng)要訪問頂層項(xiàng)目時(shí)凉唐,父模型索引可以使用QModelIndex來表示。如下:
QModelIndex indexA = model.index(0,0,QModelIndex());
由其函數(shù)申明可知霍骄,第三個(gè)函數(shù)參數(shù)可以省略台囱,當(dāng)要訪問頂層項(xiàng)目時(shí),可以省略
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);
//創(chuàng)建標(biāo)準(zhǔn)模型項(xiàng)
QStandardItemModel model;
//獲取模型項(xiàng)的根項(xiàng),根項(xiàng)是不可見的
QStandardItem *parentItem = model.invisibleRootItem();
//創(chuàng)建標(biāo)準(zhǔn)項(xiàng)item0读整,并設(shè)置顯示文本玄坦,圖標(biāo)和工具提示
QStandardItem *item0 = new QStandardItem ;
item0 ->setText("A");
QPixmap pixmap0(50,50);
pixmap0.fill("red");
item0 ->setIcon(QIcon(pixmap0));
item0->setToolTip("indexA");
//將創(chuàng)建的標(biāo)準(zhǔn)項(xiàng),作為根項(xiàng)的子項(xiàng)
parentItem ->appendRow(item0);
//將創(chuàng)建的標(biāo)準(zhǔn)項(xiàng)作為新的父項(xiàng)
parentItem = item0;
//創(chuàng)建新的標(biāo)準(zhǔn)項(xiàng)item2绘沉,使用另一種方法來設(shè)置顯示文本,圖標(biāo)和工具提示
QStandardItem *item1 = new QStandardItem ;
item1 ->setText("B");
QPixmap pixmap1(50,50);
pixmap1.fill("blue");
item1 ->setIcon(QIcon(pixmap1));
item1->setToolTip("indexB");
//將創(chuàng)建的標(biāo)準(zhǔn)項(xiàng)豺总,作為根項(xiàng)的子項(xiàng)
parentItem ->appendRow(item1);
//創(chuàng)建新的標(biāo)準(zhǔn)項(xiàng)item1车伞,他將作為item0的子項(xiàng)
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);
//將創(chuàng)建的標(biāo)準(zhǔn)項(xiàng),作為根項(xiàng)的子項(xiàng)
parentItem ->appendRow(item2);
//在樹中顯示model
QTreeView view;
view.setModel(&model);
view.show();
//獲取item0的索引并輸出item0的子項(xiàng)數(shù)目喻喳,然后輸出了item的顯示文本和工具提示
QModelIndex indexA = model.index(0,0,QModelIndex());
qDebug()<<"indexA row count"<<model.rowCount(indexA);
//indexB在indexA的子項(xiàng)中排在row=0另玖,所以第一個(gè)參數(shù)為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的子項(xiàng)中排在row=1表伦,所以第一個(gè)參數(shù)為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();
}
運(yùn)行圖片: