首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

QTableWidget与QTableView的差异

2012-08-21 
QTableWidget与QTableView的区别?QTableWidget继承自QTableView。QSqlTableModel能与QTableView绑定,但不能

QTableWidget与QTableView的区别

?

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 IDmodel->setHeaderData(0, Qt::Horizontal, tr("Name"));model->setHeaderData(1, Qt::Horizontal, tr("Salary"));QTableView *view = new QTableView;view->setModel(model);view->show();
?

? ? ? ?QTableWidget是QT程序中常用的显示数据表格的空间,很类似于VC、C#中的DataGrid。说到QTableWidget,就必须讲一下它跟QTabelView的区别了。

? ? ? QTableWidget是QTableView的子类,主要的区别是QTableView可以使用自定义的数据模型来显示内容(也就是先要通过setModel来绑定数据源),而QTableWidget则只能使用标准的数据模型,并且其单元格数据是QTableWidgetItem的对象来实现的(也就是不需要数据源,将逐个单元格内的信息填好即可)。这主要体现在QTableView类中有setModel成员函数,而到了QTableWidget类中,该成员函数变成了私有。使用QTableWidget就离不开QTableWidgetItem。QTableWidgetItem用来表示表格中的一个单元格,正个表格都需要用逐个单元格构建起来。

?

QTableWidget与QTableView的差异

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?具体区别表格

?

区别点

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

?

热点排行