关于模型/视图结构

1.对于QAbstractItemView的子类,如果想显示头文件,在model声明时,需要分配行列,即

model = new QStandardItemModel(0,2);

   如果是这种情况:

model = new QStandardItemModel();
则不会显示头文件

model = new QStandardItemModel(0,2);
    model->setHeaderData(0,Qt::Horizontal,"啦啦啦");
//    model->setHeaderData(1,Qt::Horizontal,"哈哈哈");
    QStandardItem *rootItem = model->invisibleRootItem();
    for(int i = 0;i<4;i++)
    {
        QStandardItem *subParentItem = new QStandardItem(QString("i%1").arg(i));
        rootItem->appendRow(subParentItem);
        for(int j = 0;j<3;j++)
        {
            QStandardItem *item = new QStandardItem(QString("j%1").arg(j));
            subParentItem->appendRow(item);
        }
    }
 
     ui->treeView->setModel(model);

2. 类QabstractItemModel,QabstractListModel,QAbstractTableModel不保存数据,用户需要从这些类派生出子类,并在子类中定义某种数据结构来保存数据。与此不同,类QStandardItemModel负责保存数据,每个数据项被表示为类QStandardItem的对象。

3.QTableWidget和QTableView的区别

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

 

 

 

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

    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值