天天看点

QStandardItemModel(QColumnView)小总结

 QStandardItemModel(QColumnView)小总结      
类QAbstractItemModel,QAbstractListModel,QAbstractTableModel不保存数据,      
用户需要从这些类派生出子类,并在子类中定义某种数据结构来保存数据。与此不同,类QStandardItemModel      
负责保存数据,每个数据项被保存为类QStandardItem的对象。在QStandardItem内部定义了一个类型为QVector      
的容器,每个容器元素本质上存放一个[角色,数据子项]对,它也定义了一个名为root的数据成员。      
将数据存放在QStandardItem对象中:      
void setData(const QVariant &value, int role);      
从QStandardItem对象中读取数据:      
QVariant data(int role) const;      
若数据集被表示为一个列表:  //列表被看做特殊的树:不可见根具有若干个子节点,子节点不再含其他节点      
QStandardItemModel listModel;      
QStandardItem *rootItem = listModel.invisibleRootItem(); //不可见的根节点      
for(int row = 0; row < 4; ++row){      
QStandardItem *item = new QStandardItem(QString("%0").arg(row)); //新建一个标准项      
rootItem->appendRow(item); //添加一项      
}      
QListView listView;      
listView.setModel(&listModel);      
若数据集被表示为一个表格:      
QStandardItemModel tableModel(4,4); //行列数      
for(int row = 0; row < 4; ++row){      
for(int column = 0; column < 4; ++column){      
QStandardItem *item = new QStandardItem(      
QString("%0,%1").arg(row).arg(column));      
tableModel.setItem(row,column,item);  //table      
}      
}      
QTableView tableView;      
tableView.setModel(&tableModel);      
若数据集是一棵树:      
QStandardItemModel treeModel;      
QStandardItem *parentItem = treeModel.invisibleRootItem();      
for(int i = 0; i < 4; ++i){      
QStandardItem *item = new QStandardItem(QString("%0").arg(i));      
parentItem->appendRow(item);      
parentItem = item;      
}      
QTreeView treeView;      
treeView.setModel(&treeModel);      
/********************************************************************************************/      
#include "widget.h"      
#include <QtGui>      
#include <QApplication>      
#include <QFileSystemModel>      
#include <QColumnView>      
int  main(int argc, char **argv)      
{      
QApplication app(argc, argv);      
QFileSystemModel model;      
model.setRootPath("C:/");      
QColumnView *cview = new QColumnView;      
cview->setModel(&model);      
cview->show();      
return app.exec();      
}      
运行结果:      
QStandardItemModel(QColumnView)小总结

继续阅读