Qt学习笔记之数据库结构设计5

网友投稿 164 2024-01-26

一、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) 接口二:

复制[overridevirtual]Qt::ItemFlags flags(const QModelIndex &index)const创建一个新的类用于编辑editquerymodel.h复制#ifndef

EDITQUERYMODEL_H#define EDITQUERYMODEL_H#include#includeclasseditQueryModel :public QSqlQueryModel {

public: editQueryModel(); //重写基类的虚函数boolsetData(const QModelIndex &index,const QVariant &value,

int role = Qt::EditRole); Qt::ItemFlags flags(const QModelIndex &index)const; private: //自定义接口函数

//更新数据voidrefresh(); //根据需求来定义修改表中的内容的接口boolsetName(int useId,const QString& name); }; #endif

// EDITQUERYMODEL_Heditquerymodel.c复制#include "editquerymodel.h" editQueryModel::editQueryModel() { }

bool editQueryModel::setData(const QModelIndex &index, const QVariant &value, int role) { //1、判断是否为有效列 员工表--id 用户名 年龄 地址 薪资

if(index.column() 4) returnfalse; //获取列所对应的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(); }

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:WebVR:如何使用WebVR构建网络沉浸式的体验
下一篇:Taskflow API之三大特性
相关文章

 发表评论

暂时没有评论,来抢沙发吧~