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

一、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_heditquerymodel.c
#include editquerymodel.heditquerymodel::editquerymodel(){}bool editquerymodel::setdata(const qmodelindex &index, const qvariant &value, int role){ //1、判断是否为有效列 员工表--id 用户名 年龄 地址 薪资 if(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();}

三大存储巨头对车用市场进行布局 车用存储器的前景不可限量
关于L4 级自动驾驶商业化的介绍和分析
基于新唐MCU门禁控制系统,其基本构架是怎样的
MEMS传感器件的组合应用趋势
OLED具有哪些优点与缺点
Qt学习笔记之数据库结构设计5
GPS模块的电子围栏功能有什么用
iPhone充电器大变革 快充终于要来了
碳化硅功率器件的工作原理和优势
《应对疫情启发下的智慧小区白皮书》5月22日正式发布
精密DAC和看门狗提高了模拟输出安全性
英特尔推出Thunderbolt 4产品,适用于各种设备的领先连接标准
vcs和verdi的调试及联合仿真案例
基于独立DSP平台的实时卫星导航接收机的设计
上线5G公开课,vivo创新人才培养机制,为中国培育5G人才
RAID卡的处理器
小型智能水质监测站的特点是什么
医疗应用中的液体测量
ajax如何获取数据库数据
回路电阻测试仪的作用_回路电阻测试仪故障及排除