zoukankan      html  css  js  c++  java
  • QTableWidget与QTableView的区别

    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.    
     
     
  • 相关阅读:
    查询父节点parentNode
    008-流程控制 case 语句
    007-流程控制 if 语句
    006-条件判断
    005-sort 命令使用
    004-sed 命令使用
    003-awk 命令使用
    002-printf 命令用法
    001-cut 的用法
    002-变量
  • 原文地址:https://www.cnblogs.com/lvdongjie/p/3757531.html
Copyright © 2011-2022 走看看