0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

jf_78858299 来源:纷纭杂谈 作者:CY_CHEN 2023-02-17 13:56 次阅读

一、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();
}
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • SQL
    SQL
    +关注

    关注

    1

    文章

    740

    浏览量

    43482
  • 数据库
    +关注

    关注

    7

    文章

    3602

    浏览量

    63467
  • SQlite
    +关注

    关注

    0

    文章

    78

    浏览量

    15783
收藏 人收藏

    评论

    相关推荐

    操作系统结构设计

    操作系统结构设计   操作系统有多种实现方法与设计思路,下面仅选取最有代表性的三种做一简单的叙述。   1.整体式系统结构设计 这是最常用的一种组织方式,它常被誉为“大杂烩”,也可说,整体式系统结构
    发表于 09-13 10:10

    浅谈产品结构设计特点 

    `  产品结构设计是根据产品功能而进行的内部结构的设计,是机械设计的主要内容之一。产品结构设计内容有零件的分件、部件的固定方式、产品使用和功能的实现方式、产品使用材料和表面处理工艺等。要求产品
    发表于 02-25 17:24

    【NanoPi M2试用体验】基于QT图形界面编程操作MySQL数据库

    本帖最后由 zxl_zxl 于 2016-5-19 21:09 编辑 Nanopi M2试用体验基于QT图形界面编程操作MySQL数据库在上一篇使用报告中,介绍了在Nanopi
    发表于 05-19 21:04

    软件结构设计

    软件结构设计,,
    发表于 09-26 13:55

    轴系结构设计实验

    实验六 轴系结构设计实验一、实验目的: 熟悉并掌握轴系结构设计中有关轴的结构设计、滚动轴承组合设计的基本方法。 二、实
    发表于 03-13 19:04 5.6w次阅读
    轴系<b class='flag-5'>结构设计</b>实验

    半替代护环的结构设计

    半替代护环的结构设计_张国喜
    发表于 01-07 16:52 0次下载

    如何进行数据库设计?数据库设计介绍和需求分析及结构设计资料概述

    数据库设计的任务是指根据需求研制数据库结构并应用 数据库的过程。数据库设计内容包括数据库
    发表于 09-13 17:05 0次下载
    如何进行<b class='flag-5'>数据库</b>设计?<b class='flag-5'>数据库</b>设计介绍和需求分析及<b class='flag-5'>结构设计</b>资料概述

    数据库概念结构是如何设计的概念结构设计资料概述

    本文档的主要内容详细介绍的是数据库概念结构是如何设计的概念结构设计资料概述主要内容包括了:1 概念结构2 概念结构设计的方法与步骤3
    发表于 10-26 11:49 22次下载
    <b class='flag-5'>数据库</b>概念<b class='flag-5'>结构</b>是如何设计的概念<b class='flag-5'>结构设计</b>资料概述

    O型圈密封结构设计

    O型圈密封结构设计
    发表于 02-10 15:56 16次下载

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

    数据库也是应用程序的重要部分,一个完整的应用程序几乎都包含数据库。 当前主流的数据库有DB2、MYSQL、OCI、ODBC、SQLITE、TDS、Oracle。 Sqlite是一款轻型的
    的头像 发表于 02-17 11:25 583次阅读
    <b class='flag-5'>Qt</b><b class='flag-5'>学习</b><b class='flag-5'>笔记</b>之<b class='flag-5'>数据库</b><b class='flag-5'>结构设计</b>1

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

    数据库也是应用程序的重要部分,一个完整的应用程序几乎都包含数据库。 当前主流的数据库有DB2、MYSQL、OCI、ODBC、SQLITE、TDS、Oracle。 Sqlite是一款轻型的
    的头像 发表于 02-17 11:25 362次阅读
    <b class='flag-5'>Qt</b><b class='flag-5'>学习</b><b class='flag-5'>笔记</b>之<b class='flag-5'>数据库</b><b class='flag-5'>结构设计</b>2

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

    首先布局好UI界面 布局好后,我们需要在ListWidget上显示很多内容,但是一个字符串列表不足以完成这个需求,或者能够完成效果也不是很好,所以需要创建一个新的UI页面自定义一个条目布局。
    的头像 发表于 02-17 11:27 524次阅读
    <b class='flag-5'>Qt</b><b class='flag-5'>学习</b><b class='flag-5'>笔记</b>之<b class='flag-5'>数据库</b><b class='flag-5'>结构设计</b>3

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

    首先布局好UI界面 布局好后,我们需要在ListWidget上显示很多内容,但是一个字符串列表不足以完成这个需求,或者能够完成效果也不是很好,所以需要创建一个新的UI页面自定义一个条目布局。
    的头像 发表于 02-17 11:28 339次阅读
    <b class='flag-5'>Qt</b><b class='flag-5'>学习</b><b class='flag-5'>笔记</b>之<b class='flag-5'>数据库</b><b class='flag-5'>结构设计</b>4

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

    Qt中,Qt为SQL数据库提供支持的基本模块。Qt SQL的API分为不同的层: ·驱动层 ·SQL API层 ·用户接口层
    的头像 发表于 02-17 13:57 358次阅读
    <b class='flag-5'>Qt</b><b class='flag-5'>学习</b><b class='flag-5'>笔记</b>之<b class='flag-5'>数据库</b><b class='flag-5'>结构设计</b>6

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

    Qt中,Qt为SQL数据库提供支持的基本模块。Qt SQL的API分为不同的层: ·驱动层 ·SQL API层 ·用户接口层
    的头像 发表于 02-17 13:57 371次阅读
    <b class='flag-5'>Qt</b><b class='flag-5'>学习</b><b class='flag-5'>笔记</b>之<b class='flag-5'>数据库</b><b class='flag-5'>结构设计</b>7