Qt模块化笔记之sql——数据库模型视图

可以认为,模型是就像是人的灵魂,与”视图“的外表相同。只不过这个灵魂是虚的

视图一般使用QTableView来显示数据。

sql的模型类,与前面执行语句的效果相同,只是更加地方便地显示与操作数据库。使不懂sql语句的同学也能使用数据库。

下图是执行结果,上面的数据表是QSqlQueryModel的结果,不可编辑,而下面的表是QSqlTableModel的结果,可编辑提交


第一部分,只读模型QSqlQueryModel:

if(db.open())    
{
        qDebug()<<"打开成功";
        QSqlQueryModel *model = new QSqlQueryModel;
        model->setQuery("SELECT * FROM  tb_books");
        model->setHeaderData(0, Qt::Horizontal, tr("isbn"));
        model->setHeaderData(1, Qt::Horizontal, tr("book_name"));
        model->setHeaderData(2, Qt::Horizontal, tr("price"));
        QTableView *view = new QTableView(this);
        view->setModel(model);
        view->show();
	
	QString book_name= model->record(1).value("book_name").toString();//返回第一行字段为book_name的项
    }


我们构建一个QSqlQueryModel 实例model,设置它的查询语句,然后用setHeaderData设置模型表格的水平标题,然后让它显示到QTableView中。
对于这个模型,我们可以使用它的record或data函数来访问其中的数据,它们的原型如下:

QSqlRecord	record(int row) const
virtual QVariant	data(const QModelIndex & item, int role = Qt::DisplayRole) const

第二部分,读写表格模型QSqlTableModel

    QSqlTableModel *model = new QSqlTableModel(this);
    model->setTable("tb_books");
    model->setEditStrategy(QSqlTableModel::OnManualSubmit);
    model->setFilter("isbn=4");
    model->select();
    model->setHeaderData(0, Qt::Horizontal, tr("isbn"));
    model->setHeaderData(1, Qt::Horizontal, tr("book_name"));
    model->setHeaderData(2, Qt::Horizontal, tr("price"));
    QTableView *view = new QTableView(this);
    view->setModel(model);
    view->hideColumn(0); // don't show the ID
    view->show();

QSqlTableModel与QSqlQueryModel有很大的不同,QSqlTableModel是在连接数据库后,用setTable函数设置要使用的表格的,setFilter设置过滤器,括号中是sql中的where语句省略后where后的部分,再用select()函数执行查询。然后setEditStrategy设置“编辑策略”,可用的方式如下:

Constant Value Description
QSqlTableModel::OnFieldChange 0 所有变更实时更新到数据库
QSqlTableModel::OnRowChange 1 用户选择另一行时,应用当前行的变更
QSqlTableModel::OnManualSubmit 2 手动提交,不自动提交
最后将模型在视图中显示。

QSqlTableModel有几个操作函数:

insertRecord();insertRow();insertRows();

removeRow(); removeRows();removeColumns();

revertAll();

可用于插入,删除,及提交所有更改。可见,这个模型基本拥有sql语句的大多功能


相关源码在http://pan.baidu.com/s/1tHLbf


  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值