关于模型/视图结构
1.对于QAbstractItemView的子类,如果想显示头文件,在model声明时,需要分配行列,即
model = new QStandardItemModel(0,2);
如果是这种情况:
model = new QStandardItemModel();则不会显示头文件
model = new QStandardItemModel(0,2);
model->setHeaderData(0,Qt::Horizontal,"啦啦啦");
// model->setHeaderData(1,Qt::Horizontal,"哈哈哈");
QStandardItem *rootItem = model->invisibleRootItem();
for(int i = 0;i<4;i++)
{
QStandardItem *subParentItem = new QStandardItem(QString("i%1").arg(i));
rootItem->appendRow(subParentItem);
for(int j = 0;j<3;j++)
{
QStandardItem *item = new QStandardItem(QString("j%1").arg(j));
subParentItem->appendRow(item);
}
}
ui->treeView->setModel(model);
2. 类QabstractItemModel,QabstractListModel,QAbstractTableModel不保存数据,用户需要从这些类派生出子类,并在子类中定义某种数据结构来保存数据。与此不同,类QStandardItemModel负责保存数据,每个数据项被表示为类QStandardItem的对象。
3.QTableWidget和QTableView的区别
QTableWidget继承自QTableView。QSqlTableModel能与QTableView绑定,但不能于QTableWidget绑定。
QTableWidget是QT程序中常用的显示数据表格的空间,很类似于VC、C#中的DataGrid。说到QTableWidget,就必须讲一下它跟QTabelView的区别了。
QTableWidget是QTableView的子类,主要的区别是QTableView可以使用自定义的数据模型来显示内容(也就是先要通过setModel来绑定数据源),而QTableWidget则只能使用标准的数据模型,并且其单元格数据是QTableWidgetItem的对象来实现的(也就是不需要数据源,将逐个单元格内的信息填好即可)。这主要体现在QTableView类中有setModel成员函数,而到了QTableWidget类中,该成员函数变成了私有。使用QTableWidget就离不开QTableWidgetItem。QTableWidgetItem用来表示表格中的一个单元格,正个表格都需要用逐个单元格构建起来。
具体区别表格
区别点 |
QTableView |
QTableWidget |
继承关系 |
QTableWidget继承自QTableView |
|
使用数据模型setModel |
可以使用setModel设置数据模型 |
setModel是私有函数,不难使用该函数设置数据模型 |
显示复选框setCheckState |
没有函数实现复选框 |
QTableWidgetItem类中的setCheckState(Qt::Checked);可以设置复选框 |
与QSqlTableModel绑定 |
QTableView能与QSqlTableModel绑定 |
QtableWidget不能与QSqlTableModel绑定 |
View与Model绑定注意事项
但视图与模型绑定时,模型必须使用new来创建。否则视图不能随着模型的改变而改变。