关于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();
}
转载于:https://www.cnblogs.com/xufenghfut/archive/2012/09/12/2682512.html
- 点赞
- 收藏
- 分享
- 文章举报
- 关于QDataWidgetMapper
- QtCreator 代理模型(QSortFilterProxyModel),数据窗口映射器(QDataWidgetMapper)
- QDataWidgetMapper无法保存更新数据库
- 【转】关于“Please install at least one language pack”的详
- 关于在IE下JavaScript的 Stack overflow at line 错误可能的原因
- 关于C++中enum的探讨
- SEO基础问题:12.关于外链你知道多少?
- 关于 Groovy
- 关于spring定时器一次调用却触发了两次trigger的问题分析
- BW--关于Open Hub Service的一些连接
- 【阅读笔记】关于Direct3D初始化的一个完整工程及介绍
- 关于项目管理的用人
- 关于ListView的OnCustomDrawXXX事件
- 关于windows错误信息(1407:找不到窗口类别)的原因
- 关于size_t 的warning C4267警告的解决
- 【答客户问】回答一些关于嵌入式新手入门的问题
- 关于薪水
- 关于框架设计(游戏领域)
- 关于asp.net Session丢失问题的总结
- 关于VS2015 如何使用内置IIS调试WEB应用程序