zoukankan      html  css  js  c++  java
  • 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 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)));
        }
    }
    

    https://blog.csdn.net/swartz_lubel/article/details/54986372  

  • 相关阅读:
    c# 判断一个ip通不通 能不能ping通
    C#二进制与字符串互转换,十六进制转换为字符串、float、int
    将datagridview数据保为xml或txt文件
    笨办法学Python(九)
    笨办法学Python(八)
    笨办法学Python(七)
    Linux安装 NTFS 支持
    Linux安装中文字体包
    Oracle VM VirtualBox 共享文件夹设置
    Verilog频率计设计
  • 原文地址:https://www.cnblogs.com/leijiangtao/p/4165911.html
Copyright © 2011-2022 走看看