QTableWidget与QTableView的区别

QTableWidget与QTableView的区别

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

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用来表示表格中的一个单元格,正个表格都需要用逐个单元格构建起来。

​ 具体区别表格

区别点QTableViewQTableWidget
继承关系QTableWidget继承自QTableView
使用数据模型setModel可以使用setModel设置数据模型setModel是私有函数,不难使用该函数设置数据模型
显示复选框setCheckState没有函数实现复选框QTableWidgetItem类中的setCheckState(Qt::Checked);可以设置复选框
与QSqlTableModel绑定QTableView能与QSqlTableModel绑定QtableWidget不能与QSqlTableModel绑定

     

View与Model绑定注意事项

但视图与模型绑定时,模型必须使用new来创建。否则视图不能随着模型的改变而改变。

Eorror错误的写法

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 正确的写法

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.    
​
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值