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

    文章

    764

    浏览量

    44132
  • 数据库
    +关注

    关注

    7

    文章

    3799

    浏览量

    64394
  • SQlite
    +关注

    关注

    0

    文章

    78

    浏览量

    15945
收藏 人收藏

    评论

    相关推荐

    数据库系统是什么?数据库系统概念数据库设计资料免费下载

      什么是概念结构设计1.将需求分析得到的用户需求抽象为信息结构即概念模型的过程就是概念结构设计2.概念结构是各种数据模型的共同基础,它比
    发表于 09-07 14:34 1次下载
    <b class='flag-5'>数据库</b>系统是什么?<b class='flag-5'>数据库</b>系统概念<b class='flag-5'>之</b><b class='flag-5'>数据库</b>设计资料免费下载

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

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

    如何使用PowerDesigner进行数据库静态结构设计?详细资料概述

    把用户需求抽象为概念模型即为概念结构设计。 概念模型除了要求能反映客观世界并且易于理解外,还要求其易于向数据模型(如关系模型)转化。 概念模型独立于具体的数据库系统,是整个数据库
    发表于 09-13 17:05 0次下载
    如何使用PowerDesigner进行<b class='flag-5'>数据库</b>静态<b class='flag-5'>结构设计</b>?详细资料概述

    数据库静态结构如何设计?详细资料任务和方法说明

    任务:实现数据库设计新奥尔良方法中概念结构设计和逻辑结构设计
    发表于 09-27 15:32 1次下载
    <b class='flag-5'>数据库</b>静态<b class='flag-5'>结构</b>如何设计?详细资料任务和方法说明

    数据库教程之如何进行数据库设计

    本文档的主要内容详细介绍的是数据库教程之如何进行数据库设计内容包括了:1 数据库设计概述 ,2 数据库需求分析 ,3 数据库
    发表于 10-19 10:41 21次下载
    <b class='flag-5'>数据库</b>教程之如何进行<b class='flag-5'>数据库</b>设计

    数据库设计的七大知识点总结详细资料免费下载

    本文档的主要内容详细介绍的是数据库设计的七大知识点总结包括了:1 数据库设计概述2 需求分析3 概念结构设计4 逻辑结构设计5
    发表于 10-19 10:41 0次下载
    <b class='flag-5'>数据库</b>设计的七大知识点总结详细资料免费下载

    数据库学习入门资料如何进行数据库设计

    本文档的主要内容详细介绍的是数据库学习入门资料如何进行数据库设计主要内容包括了:数据库系统设计的1 概述2 需求分析3 概念设计4 逻辑设
    发表于 10-25 16:29 14次下载
    <b class='flag-5'>数据库</b><b class='flag-5'>学习</b>入门资料<b class='flag-5'>之</b>如何进行<b class='flag-5'>数据库</b>设计

    数据库学习入门资料数据库的概念结构详细资料概述

    什么是概念结构设计 将需求分析得到的用户需求抽象为信息结构即概念模型的过程就是概念结构设计 概念结构是各种数据模型的共同基础,它比
    发表于 10-25 16:29 0次下载
    <b class='flag-5'>数据库</b><b class='flag-5'>学习</b>入门资料<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>资料概述

    数据库的设计概念总结

    本文档的主要内容详细介绍的是数据库的设计概念总结主要内容包括了:1.数据库设计概述,2.需求分析,3.概念结构设计,4.逻辑结构设计,5.
    发表于 01-09 17:29 13次下载
    <b class='flag-5'>数据库</b>的设计概念总结

    数据库设计开发案例教程之数据库设计的资料介绍

    本文档的主要内容详细介绍的是数据库设计开发案例教程之数据库设计的资料介绍主要内容包括了:1 数据库设计概述,2 需求分析,3 概念结构设计,4 逻辑
    发表于 01-11 11:20 17次下载
    <b class='flag-5'>数据库</b>设计开发案例教程之<b class='flag-5'>数据库</b>设计的资料介绍

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

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

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

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

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

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

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

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