QSqlTableModel类学习

QSqlTableModel类学习

本地源码地址

创建
model = new QSqlTableModel(this); //创建
基本设置
void initializeModel(QSqlTableModel *model)
{
    //设置数据库表 不从表中选择数据,而是获取其字段信息。
    model->setTable("person"); 
    //描述在数据库中编辑值时选择的策略。
    //QSqlTableModel::OnFieldChange:对模型的所有更改都将立即应用到数据库。
    //QSqlTableModel::OnRowChange:当用户选择另一行时,将应用对该行的更改。
    //QSqlTableModel::OnManualSubmit:所有更改都将缓存在模型中,直到调用submitAll()或revertAll()。
    model->setEditStrategy(QSqlTableModel::OnManualSubmit);
    /*使用指定的筛选器和排序条件,使用通过setTable()设置的表中的数据填充模型,如果成功,则返回true;否则返回false。*/
    model->select();
    
    //setHeaderData 继承QSqlQueryModel::setHeaderData方法——重新实现从QAbstractItemModel: setHeaderData ()。
    //注意,这个函数不能用于修改数据库中的值,因为模型是只读的。
    model->setHeaderData(0, Qt::Horizontal, QObject::tr("ID"));
    model->setHeaderData(1, Qt::Horizontal, QObject::tr("First name"));
    model->setHeaderData(2, Qt::Horizontal, QObject::tr("Last name"));
}
利用事务提交数据
  void TableEditor::submit()
 {
     //QSqlDatabase::transaction() 开启事务
     model->database().transaction();
     //提交所有挂起的更改并在成功时返回true。 
      if (model->submitAll()) {
          model->database().commit(); //提交
      } else {
          model->database().rollback();//回滚
          QMessageBox::warning(this, tr("Cached Table"),
                               tr("The database reported an error: %1")
                               .arg(model->lastError().text()));
      }
  }
使用筛选功能
void MainWindow::changeArtist(int row)
{
    if (row > 0) {
        //relationModel(2)返回的是 QSqlRelationalTableModel
        QModelIndex index = model->relationModel(2)->index(row, 1);
        // 将当前筛选器设置为筛选。
        // 过滤器是一个SQL WHERE子句,没有关键字WHERE(例如,name='Josephine')。
        model->setFilter("artist = '" + index.data().toString() + '\'') ;
        showArtistProfile(index);
    } else if (row == 0) {
        model->setFilter(QString());
        showImageLabel();
    } else {
        return;
    }
}

使用排序

model->sort(1,Qt::AscendingOrder) //设置第一列 升序 排序
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值