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);

model.setHeaderData(0, Qt::Horizontal, tr("Label"));
model.setHeaderData(1, Qt::Horizontal, tr("Quantity")); ui.tableView->setModel(&model); for (int row = 0; row < 4; ++row) {
for (int column = 0; column < 2; ++column) {
QModelIndex index = model.index(row, column, QModelIndex());
model.setData(index, QVariant((row+1) * (column+1)));
}
}

Right 正确的写法

QStandardItemModel *model;

model = new QStandardItemModel(4,2);
ui.tableView->setModel(model); model->setHeaderData(0, Qt::Horizontal, tr("Label"));
model->setHeaderData(1, Qt::Horizontal, tr("Quantity")); for (int row = 0; row < 4; ++row) {
for (int column = 0; column < 2; ++column) {
QModelIndex index = model->index(row, column, QModelIndex());
model->setData(index, QVariant((row+1) * (column+1)));
}
}

https://blog.csdn.net/swartz_lubel/article/details/54986372  

最新文章

  1. Spring、hibernate以及struts2三大框架的整合
  2. Plugins
  3. PHP获取http头信息和CI中获取HTTP头信息的方法
  4. 【软件工程-Teamwork 3】团队角色分配和团队贡献分分配规则
  5. 网易云数据结构- Maximum Subsequence Sum
  6. CVE-2015-0057 POC构造 &amp; 利用分析(2015.7)
  7. c# mvc如何生成excel
  8. Callable Future接口的设计原理
  9. mui 动态加载数据出现的问题处理 (silder轮播组件 indexedList索引列表 下拉刷新不能继续加载数据)
  10. python下载mp4 同步和异步下载支持断点续下
  11. Sphinx coreseek 3.2
  12. bzoj4358 premu
  13. 微信小程序笔记&lt;七&gt;视图层 —— wxml
  14. hibernate flush clear的区别
  15. Spark SQL -- Hive
  16. 阿里云centos 安装禅道
  17. XE5 修复 安卓 输入法隐藏 后 无法退出的问题 3.1
  18. Spring boot 各种入门及问题
  19. 完美解决苹果电脑mac终端无法输入大写T的问题
  20. 【转】编程思想之多线程与多进程(3)——Java中的多线程

热门文章

  1. ActiveMQ的环境搭建及使用
  2. SPOJ 8222 NSUBSTR(SAM)
  3. angularjs中ng-repeat的使用
  4. Python Web Scraper - Simple Url Request
  5. SCU 4313 把一棵树切成每段K个点 (n%k)剩下的点不管
  6. ERROR security.UserGroupInformation: Priviledge...
  7. 【Linux】mkdir命令
  8. java线程同步: synchronized详解(转)
  9. 转:【微信小程序】 微信小程序-拍照或选择图片并上传文件
  10. PHP-Windows下搭建Nginx+PHP环境