博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
QTableWidget与QTableView的区别
阅读量:5952 次
发布时间:2019-06-19

本文共 2033 字,大约阅读时间需要 6 分钟。

博客分类:
  •  

 

QTableWidget继承自QTableView。QSqlTableModel能与QTableView绑定,但不能于QTableWidget绑定。

 

 

Cpp代码  
  1. QSqlTableModel *model = new QSqlTableModel;  
  2. model->setTable("employee");  
  3. model->setEditStrategy(QSqlTableModel::OnManualSubmit);  
  4. model->select();  
  5. model->removeColumn(0); // don't show the ID  
  6. model->setHeaderData(0, Qt::Horizontal, tr("Name"));  
  7. model->setHeaderData(1, Qt::Horizontal, tr("Salary"));  
  8.   
  9. QTableView *view = new QTableView;  
  10. view->setModel(model);  
  11. view->show();  
 

       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来创建。否则视图不能随着模型的改变而改变。

Eorror错误的写法

 

Cpp代码  
 
  1. QStandardItemModel model(4,2);  
  2.   
  3.   
  4. model.setHeaderData(0, Qt::Horizontal, tr("Label"));  
  5. model.setHeaderData(1, Qt::Horizontal, tr("Quantity"));  
  6.   
  7.   
  8. ui.tableView->setModel(&model);  
  9.   
  10. for (int row = 0; row < 4; ++row) {  
  11.     for (int column = 0; column < 2; ++column) {  
  12.         QModelIndex index = model.index(row, column, QModelIndex());  
  13.         model.setData(index, QVariant((row+1) * (column+1)));  
  14.     }  
  15. }  
  16.    
 

Right 正确的写法

 

Cpp代码  
  1. QStandardItemModel *model;  
  2.   
  3. model = new QStandardItemModel(4,2);  
  4. ui.tableView->setModel(model);  
  5.   
  6. model->setHeaderData(0, Qt::Horizontal, tr("Label"));  
  7. model->setHeaderData(1, Qt::Horizontal, tr("Quantity"));  
  8.   
  9. for (int row = 0; row < 4; ++row) {  
  10.     for (int column = 0; column < 2; ++column) {  
  11.         QModelIndex index = model->index(row, column, QModelIndex());  
  12.         model->setData(index, QVariant((row+1) * (column+1)));  
  13.     }  
  14. }  
  15.    
 

 

转载地址:http://ykoxx.baihongyu.com/

你可能感兴趣的文章
MySQL for Mac 安装和基本操作(包含后期的环境变量设置)
查看>>
Linux及windows下常见压缩程序的压缩能力对比
查看>>
JAVAEE-junit测试hibernate里的方法(hibernate交给spring管理)的问题
查看>>
MOTO MB860 国行2.3.5优化增强ROM_Top_T5_end(经典收藏版)
查看>>
C#学习经典(二)---MVC框架(Model view Controller)
查看>>
log4j配置文件说明
查看>>
Maven: 为Compiler插件设置source和target版本
查看>>
linux下永久添加静态路由
查看>>
android 全局变量和局部变量命名规则
查看>>
Ubuntu Sub-process /usr/bin/dpkg
查看>>
详解DNS的常用记录(下):DNS系列之三
查看>>
linux的日志服务器关于屏蔽一些关键字的方法
查看>>
事情的两面性
查看>>
只要会营销,shi都能卖出去?
查看>>
sed单行处理命令奇偶行输出
查看>>
走向DBA[MSSQL篇] 从SQL语句的角度 提高数据库的访问性能
查看>>
VC++深入详解学习笔记1
查看>>
安装配置discuz
查看>>
CentOS7 64位小型操作系统的安装
查看>>
线程互互斥锁
查看>>