电子说
一、QSqlQueryModel模型基本使用
//使用QSqlQueryModel来高效地查询数据库操作
//1、创建QSqlQueryModel对象,并设置相关的表头信息
QSqlQueryModel* model = new QSqlQueryModel;
//执行sql语句,将查询出来的结果转换成model对象
model->setQuery("select name ,age,address,salary from staff");
//根据需求设置表头信息
model->setHeaderData(0,Qt::Horizontal,"Name");
model->setHeaderData(1,Qt::Horizontal,"Age");
model->setHeaderData(2,Qt::Horizontal,"Address");
model->setHeaderData(3,Qt::Horizontal,"Salary");
//给ui控件设置一个模型
QTableView* view = new QTableView(ui->tableView);
view->setFixedSize(QSize(this->width(),this->height()));
view->setModel(model);//相当于将数据联动到UI控件上
//将view显示
view->show();
运行后,页面就可以显示出数据库表格相关信息了。
二、QSqlQueryModel可编辑接口重写
默认情况下,QSqlQueryModel模型是只读的。要使它具有可读写性,必须继承它并重新实现setData()和flags()。另一种选择是使用QSqlTableModel,它提供了基于单个数据表的读写模型。
接口一:
[virtual]bool setData(const QModelIndex &index,const QVariant &value,int role = Qt::EditRole)
接口二:
[override virtual]Qt::ItemFlags flags(const QModelIndex &index)const
创建一个新的类用于编辑
editquerymodel.h
#ifndef EDITQUERYMODEL_H
#define EDITQUERYMODEL_H
#include
#include
class editQueryModel : public QSqlQueryModel
{
public:
editQueryModel();
//重写基类的虚函数
bool setData(const QModelIndex &index,const QVariant &value,int role = Qt::EditRole);
Qt::ItemFlags flags(const QModelIndex &index)const;
private:
//自定义接口函数
//更新数据
void refresh();
//根据需求来定义修改表中的内容的接口
bool setName(int useId,const QString& name);
};
#endif // EDITQUERYMODEL_H
editquerymodel.c
#include "editquerymodel.h"
editQueryModel::editQueryModel()
{
}
bool editQueryModel::setData(const QModelIndex &index, const QVariant &value, int role)
{
//1、判断是否为有效列 员工表--id 用户名 年龄 地址 薪资
if(index.column() < 1 || index.column() > 4)
return false;
//获取列所对应的id
QModelIndex prinmaryIndex = QSqlQueryModel::index(index.row(),0);
int id = this->data(prinmaryIndex).toInt();
//在修改行时,将数据清除,把整个model清空
this->clear();
bool ok;
//根据需求修改所对应的列
if(index.column() == 1)
{
ok = setName(id,value.toString());
}
//刷新数据
refresh();
return ok;
}
Qt::ItemFlags editQueryModel::flags(const QModelIndex &index) const
{
//1、获取当前单元格的编辑状态
Qt::ItemFlags flag = QSqlQueryModel::flags(index);
//2、给现有的标志增加一个可编辑的标志
// if(index.column()==1)
flag = flag | Qt::ItemIsEditable;//给它设置一个可编辑的状态
return flag;
}
void editQueryModel::refresh()
{
//相当于将数据库的数据查询出来,转换成一个model
this->setQuery("select * from staff");
this->setHeaderData(0,Qt::Horizontal,"ID");
this->setHeaderData(1,Qt::Horizontal,"Name");
this->setHeaderData(2,Qt::Horizontal,"Age");
this->setHeaderData(3,Qt::Horizontal,"Address");
this->setHeaderData(4,Qt::Horizontal,"Salary");
}
bool editQueryModel::setName(int useId, const QString &name)
{
//相当于一个刷新的操作
QSqlQuery query;
query.prepare("update staff set name = ? where id = ?");
query.addBindValue(name);
query.addBindValue(useId);
return query.exec();
}
全部0条评论
快来发表一下你的评论吧 !