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

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

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

 

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

你可能感兴趣的文章
八款开源Android游戏引擎
查看>>
Android MediaPlayer基本使用方式
查看>>
android 获取坐标
查看>>
彻底解决 Eclipse + Android 自动补全卡死的问题
查看>>
请记住: i AM SoLiD. (关于View的事件触发顺序)
查看>>
As3.0 删除容器所有子对象
查看>>
TweenLite参数说明
查看>>
flash TweenLite onComplete 提前执行的问题
查看>>
mysqldump
查看>>
字符串 与 java.sql.Timestamp转换博客分类: javaJavaSQL
查看>>
奇怪的ubuntu不能解析域名的问题
查看>>
cat | wc -l 少一行的问题
查看>>
socket 科普文章
查看>>
Mutex, semaphore, spinlock的深度解析
查看>>
pthread线程使用小结
查看>>
线程池 范例
查看>>
utf8转gbk,去掉繁体字符
查看>>
UTF-8 GBK UTF8 GB2312 之间的区别和关系
查看>>
Linux内存管理之一 分段与分页
查看>>
Linux内存管理之二 内存节点和内存分区
查看>>