关于QDataWidgetMapper
今天继续改进师兄的程序,使用QDataWidgetMapper,主要是实现窗体中可以编辑的窗口和QSqlTableModel的关联。
主要有3个步骤:
1、创建 QDataWidgetMapper 对象
2、关联 model
3、关联 widgets,并创建其与model中section的映射
但是在使用的时候总是有问题,最后发现是多了一句。
部分代码如下:
addmodel=new QSqlTableModel(this);
        addmodel->setTable(tr("cankao"));
        //addmodel->setSort(Database_ID, Qt::AscendingOrder);
        //addmodel->setEditStrategy(QSqlTableModel::OnManualSubmit);//多的那一句,耽误了我好久的时间
        addmodel->select();
//1.创建 QDataWidgetMapper 对象
mapper = new QDataWidgetMapper(this);
    mapper->setSubmitPolicy(QDataWidgetMapper::AutoSubmit);
//2.关联 model
    mapper->setModel(addmodel);
//3、关联 widgets,并创建其与model中section的映射
mapper->addMapping(ui->le_name, Database_Name);
    mapper->addMapping(ui->le_kind, Database_Kind);
    mapper->addMapping(ui->le_nd, Database_Nd);
    mapper->addMapping(ui->le_wd, Database_Wd);
    mapper->addMapping(ui->le_sd, Database_Sd);
    mapper->addMapping(ui->le_ls, Database_Ls);
    mapper->addMapping(ui->le_sj, Database_Time);
    mapper->addMapping(ui->le_cbm, Database_Cbm);
另外,参照《C++ GUI Qt4编程》重写了done
void ADDRECORD::done(int result)
{
      //将在窗体进行的更改返回给模型
      bool ok3;
      ok3=mapper->submit();//Submits all changes from the mapped widgets to the model.
      if(!ok3)
      {
          addmodel->database().rollback();//database().rollback(); //回滚
          QMessageBox::warning(this,tr("tableModel"),
                                       tr("数据库错误:%1").arg(addmodel->lastError().text()));
      }
      //关闭对话框,并设置返回result。
QDialog::done(result);
}
给数据库添加一条记录的代码
void ADDRECORD::on_pb_tj_clicked()
{
      int row = mapper->currentIndex();//重新找回当前行
      mapper->submit();
      bool ok;
      ok=addmodel->insertRow(row);//插入行
      mapper->setCurrentIndex(row);
  ui->le_name->setFocus();
}
 
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号