QTableWidget继承自QTableView。QSqlTableModel能与QTableView绑定,但不能于QTableWidget绑定。
QSqlTableModel *model = new QSqlTableModel; model->setTable("employee"); model->setEditStrategy(QSqlTableModel::OnManualSubmit); model->select(); model->removeColumn(0); // don't show the ID model->setHeaderData(0, Qt::Horizontal, tr("Name")); model->setHeaderData(1, Qt::Horizontal, tr("Salary")); QTableView *view = new QTableView; view->setModel(model); view->show(); |
模型视图结构
Qt4中引入了模型/视图框架来完成数据与表现的分离,这在Qt4中称为InterView框架。
MVC设计模式是起源于Smalltalk的一种与用户界面相关的设计模式。MVC包括三个元素:模型(Model)表示数据,视图(View)是用户界面,控制(Controler)定义了用户在界面上的操作。通过使用MVC模式,有效的分离了数据和用户界面,使得设计更为灵活,更能适应变化。
模型:所有的模型都基于QAbstractItemModel类,该类是抽象基类。
视图:所有的视图都从抽象基类QAbstractItemView继承。
Interview框架提供了一些常见的模型类和视图类,例如QStandardItemModel,QDirModel,QStringListModel和QColumnView,QHeaderView,QListView,QTableView,QTreeView。
相对于使用现有的模型和视图,Qt还提供了更为便捷的类来处理常见的一些数据模型。他们将模型和视图合一,便于处理一些常规的数据类型。使用这些类型虽然简单方便,但也失去了模型视图结构的灵活性,所以要根据具体情况来选择。
具体区别表格
区别点 | QTableView | QTableWidget |
继承关系 | QTableWidget继承自QTableView | |
使用数据模型setModel | 可以使用setModel设置数据模型 | setModel是私有函数,不难使用该函数设置数据模型 |
显示复选框setCheckState | 没有函数实现复选框 | QTableWidgetItem类中的setCheckState(Qt::Checked);可以设置复选框 |
与QSqlTableModel绑定 | QTableView能与QSqlTableModel绑定 | QTableWidget能与QSqlTableModel绑定 |
View与Model绑定注意事项
但视图与模型绑定时,模型必须使用new来创建。否则视图不能随着模型的改变而改变。
Eorror错误的写法 |
QStandardItemModel model(4,2);
|
Right 正确的写法 |
QStandardItemModel *model;
|