Qt使用QSqlTableModel界面显示用法(五、查询功能)

【Qt之QSqlTableModel】介绍及使用 阅读详情

众所周知,查询功能是所有基础操作中最麻烦的功能。
因为查询过程中如果要执行其他操作,可能会造成数据错位等情况。比如我原有五个数据,按搜索要求,检索出三个数据,我要删除搜索出的数据中第三个数据,此时删除的索引值是2,如果直接使用删除语句,则删除的是原数据中第三个数据,修改也是同理。
但是在QSqlTableModel中只需要使用Filter语句过滤,即可同步当前数据。

具体请看以下步骤:

  • 首先实现搜索操作

LineEdit选用on_lineEdit_textChanged(const QString &arg1)槽函数,自定。

void MainWindow::on_lineEdit_textChanged(const QString &arg1)
{
    QSqlTableModel * model = new QSqlTableModel(this,db);//新建model
    model->setTable("EXAMPLE");//设置表
    if(!arg1.isEmpty())//搜索栏为空
        model->setFilter("city ='"+arg1+"'");//model过滤表中符合的数据
    ui->tableView->setModel(model);
    model->select();//显示修改后的数据
}

搜索前是这样的

搜索后是这样的

由此可见,只是简单的添加

model->setFilter("city ='"+arg1+"'")

就可以实现数据的筛选。

相当于数据库语句

select * from EXAMPLE where city='南京'

值得注意的是,这里的搜索内容在代码中就指定为city,如果想实现多功能的搜索,可以自行研究添加,只要在filter语句中将city替换即可。

  • 开篇提到了数据错位的情况

那么我们在调用插入、修改、删除操作时,也要同时将model检索当前行编辑的值。

因为我这里的插入是从最后一行插入的,所以也需要修改;如果在插入时按照第0行插入,如语句model->insertRow(0);则不需要修改原代码。

在model->setTable(“EXAMPLE”);语句的下一行加上

if(!ui->lineEdit->text().isEmpty())//搜索栏为空
        model->setFilter("city ='"+ui->lineEdit->text()+"'");//model过滤表中符合的数据

即可。

具体代码:

void MainWindow::on_pushButton_clicked()//添加按钮
{
    AddRecord * add = new AddRecord(this);
    add->exec();
    if(!add->isClicked)
        return;
    QString *str = add->str;
    QSqlTableModel * model = new QSqlTableModel(this,db);
    model->setTable("EXAMPLE");
    if(!ui->lineEdit->text().isEmpty())//搜索栏为空
        model->setFilter("city ='"+ui->lineEdit->text()+"'");//model过滤表中符合的数据
    int row = model->rowCount();
    model->insertRow(row);
    model->setData(model->index(row,1),str[0]);
    model->setData(model->index(row,2),str[1].toInt());
    model->setData(model->index(row,3),str[2]);
    model->submitAll();//提交插入的数据
    ui->tableView->setModel(model);//设置model模型
    model->select();//显示
}

void MainWindow::on_pushButton_2_clicked()//删除按钮
{
    int row = ui->tableView->currentIndex().row();//记录当前选择行
    if(QMessageBox::Yes == QMessageBox::question(this,"Make Sure","确定删除第"+QString::number(row+1)+"行吗?",QMessageBox::Yes | QMessageBox::No , QMessageBox::Yes))
    {//提示框,防止误操作,是/否,按下是的操作后
        QSqlTableModel * model = new QSqlTableModel(this,db);//新建model
        model->setTable("EXAMPLE");//设置表
        if(!ui->lineEdit->text().isEmpty())//搜索栏为空
            model->setFilter("city ='"+ui->lineEdit->text()+"'");//model过滤表中符合的数据
        if(model->select())//判断是否为空表
            model->removeRow(row);//删除当前行
        model->submitAll();//提交修改的数据
        ui->tableView->setModel(model);//设置模型
        model->select();//显示修改后的数据
    }
}

void MainWindow::on_tableView_doubleClicked(const QModelIndex &index)//双击tableview
{
    QSqlTableModel * model = new QSqlTableModel(this,db);//新建model
    model->setTable("EXAMPLE");//设置表
    if(!ui->lineEdit->text().isEmpty())//搜索栏为空
        model->setFilter("city ='"+ui->lineEdit->text()+"'");//model过滤表中符合的数据
    bool isOK;//定义bool类型
    QString text = QInputDialog::getText(this,"Update","修改当前内容",QLineEdit::Normal,index.data().toString(),&isOK);//弹出修改框,默认显示当前内容,修改后点击按钮,是则isOK为true,否则isOK为false
    if(!isOK)//判断isOKbool类型
        return ;
    if(model->select())//判断是否空表
        model->setData(model->index(index.row(),index.column()),text);//重新设置当前单元格内容
    model->submitAll();//提交修改
    ui->tableView->setModel(model);
    model->select();//显示修改后的数据

~~~

2024年Qt数据库(六)QSqlTableModel_qsqltablemodel onmanualsubmit,2024年最新C C++程序员必经的实践之路 我们将“陈刚”改为“李强”,如果我们点击“撤销修改”,那么它就会重新改为“陈刚”,而当我们点击“提交修改”后它就会保存到数据库,此时再点击“撤销修改”就修改不回来了。query.exec(QObject::tr(“insert into student values (1,’陈刚’)”));void Widget::on_pushButton_2_clicked() //撤销修改。 阅读详情

相关推荐

Qt QSqlTableModel详解

1.QSqlTableModel 用来显示数据库中数据表的数据,实现对数据的编辑、插入、删除等操作。实现数据的排序和过滤 2.常用API void setTable(const QString &tableName) //设置数据表名称 void setFilter(const QString &filter) //设置记录过滤条件 void setSort(int column,Qt::SortOrder order) //设置排序字段和排序规则,需调用select()才生...

希望能帮助大家,希望大家多多支持,你们的支持是我前进的动力。 2万+

Qt数据库练习之QSqlRelationalTableModel的使用(MySql数据库示例,含源码+注释)

一、操作示例 1.1 源数据表图片 EmployeeInfo(员工信息表): PositionInfo(职位信息表): 1.2 关系字段操作示例 下图为关系字段操作示例图,其中双击职位列某行后,会弹出代理控件,供用户选择(在本文中控件失去焦点则修改数据)。 提示:示例图中开始先刷新了数据表,表明数据为最新数据;源码在本文第三节(源码含详细注释)。 提示:不会使用Qt设计师设计界面的小伙伴点击这里 二、了解QSqlRelationalTableModel 因为是sql操作,所以需要在pro文件添加“Q

lw的博客 2660

动态博弈、威胁与承诺(博弈论入门学习笔记四)

0 动态博弈 动态博弈:行动有先后顺序,不同的参与人在不同时点行动,先行动者的选择影响后行动者的选择空间,后行动者可以观察到先行动者做了什么选择。例如下棋、消费者和商家讨价还价、谈婚论嫁、企业之间的价格战等等。 因此,为了做出最优的行动选择,每个参与人都应该思考:如果我如此选择,对方将如何应对?如果我是他,我将会如何行动?给定他的应对,什么是我的最优选择? 动态博弈中的战略:在博弈开始之前就...

stepho的博客 1万+

QSqlTableModel 类操作数据库(创建、查询、删除、修改)详解

简介

wokaowokaowokao12345的专栏 8050

对西安交大轴承数据集XJTU-SY_Bearing_Datasets进行读取和处理:

故障诊断,对西安交大轴承数据集XJTU-SY_Bearing_Datasets进行读取和处理

qq_44757503的博客 6061

实战教程:如何用Python+小波变换+CNN搞定医学影像中的条纹噪声(附完整代码)

本文提供了一套完整的实战方案,指导如何利用Python结合小波变换与卷积神经网络(CNN)去除医学影像中的条纹噪声。该方法通过小波变换精准定位噪声,再使用轻量化CNN进行针对性清除,有效保护图像细节,并附有可运行的完整代码,为医学影像处理与AI分析提供高效工具。

weixin_29056101的博客 269

qtableview 实现筛选功能 model为QSqlTableModel

开发修理登记软件时,需要在tableview中的表头实现筛选功能 代码如下: 第一步重写 QHeaderView,网上有一种方法也是重写,然后在paintSection函数中指定位置大小,非常方便,不需要跟着状态进行改变。但是不能根据列数进行创建。 因为在创建之前不清楚总共有多少列,找了一个折中的办法,就是创建时指定有多少列,也存在一个问题,tableView中列数可以配置,程序初建了一个最多的,当列数减少之后,多余的隐藏,同时在改变大小等情况下,都需要重新指定筛选按钮的位置。 #include <Q

weixin_45247650的博客 2812

Windows 11下Telnet端口23连接失败的终极解决方案(附详细排查步骤)

本文详细解析了Windows 11系统中Telnet端口23连接失败的常见原因及解决方案。从Telnet客户端功能启用、服务端配置检查到网络连接诊断,提供了一套完整的排查步骤,帮助用户快速定位并解决连接问题,同时给出了安全使用Telnet的建议。

win55的博客 455

QT QSqlTableModel 多条件选择

_model->setFilter(QString("(status = '%1')AND(glassId like '%2%')AND(updateTime >= '%3')AND(updateTime <= '%4')") .arg(ui->comboBox_status->currentText()) .arg(ui->comboBox_title->currentText())

weixin_42172576的博客 633

ST7789T3与CST816D驱动全解析,面试技巧第11篇:嵌入式面试场景问答 10 连发。

SPI模式下,SCLK、MOSI、CS、DC、RST为必需引脚;8080模式下需连接D0-D7、WR、RD等信号线。CST816D触摸芯片通常通过I2C接口通信,需连接SCL、SDA及INT(中断)引脚。确保电源引脚(VCC、GND)稳定供电,ST7789T3典型工作电压为3.3V。显示异常时检查时序参数,如SPI时钟频率(建议≤40MHz)、数据建立时间。初始化流程需发送一系列命令序列,包括设置像素格式、扫描方向、帧率控制等。扫描方向(MADCTL)可调整显示旋转角度,需根据实际硬件布局配置。

a967gsvj的博客 374

【电机应用控制】——步进电机控制原理(四相五线/两相四线/细分驱动)&驱动器&梯形/S形加减速算法&直线/圆弧插补

步进电机是一种把电脉冲信号转换为角位移(左)或线位移(右)的电动机。两相通常1.8°,三相通常1.2°、无相通常0.72°,角位移=脉冲个数X步距角。在非超载且不超频的情况下,电机的旋转位置只取决于脉冲个数,转速只取决脉冲信号的频率。所以只需要统计脉冲个数和频率,不再需要编码器测速和位置,具有优秀的开环能力,当然也可接编码器反馈速度和位置数据,实现更加精准的闭环控制。永磁式动态性能好,输出力矩大,但步距角大通常7.5°;反应式(磁阻式)结构简单成本低,步距角小一般1.2°,但振动噪音大动态性能差;

weixin_51658186的博客 5万+

Qt QSqlTableModel表格模型,可以在表格里增删改查

connection.h #ifndef CONNECTION_H #define CONNECTION_H #include <QMessageBox> #include <QSqlDatabase> #include <QSqlQuery> #include <QCoreApplication> static bool createConne...

qq_24127015的博客 2799

【专栏必读】王道考研408操作系统+Linux系统编程万字笔记使用说明及章节导航

王道408考研操作系统)第一章计算机系统概述-第一节1、2:操作系统概念、概念和特征1:理解fork的作用prinf("还没有执行fork函数的本进程为:%d\n" , getpid());//其返回值是pid类型的 sleep(1);if(ret > 0) //父进程返回的是子进程ID {printf("我是父进程,我的id是:%d,我的孩子id是%d\n" , getpid() , ret);sleep(1);} } else if(ret == 0) //子进程fork返回值是0 {.........

快乐江湖的博客 3万+

【Qt】数据库实战之QSqlTableModel模型

00. 目录 文章目录00. 目录01. 概述02. 开发环境03. QSqlTableModel基本操作04. QSqlTableModel修改操作05. QSqlTableModel查询操作06. QSqlTableModel排序操作07. QSqlTableModel删除操作08. QSqlTableModel插入操作09. QSqlTableModel总结10. 附录 01. 概述 只读的QSqlQueryModel模型其实也可以实现编辑功能的,但是实现起来很麻烦。而QSqlTableModel提供

C/C++软件工程师、嵌入式软件工程师、物联网研发工程师、C/C++讲师、物联网讲师、嵌入式讲师、鸿蒙讲师---欢迎大家一起交流(私信添加博主微信) 1万+

OmniDrive(3):逐行代码详解

模型效果: 端到端联合规划与推理 接下来,简单介绍下训练的配置 1.1 模型配置 模型基于sparse query based的3D Bev感知框架StreamPetr ,用query来编码动态目标(如车辆、行人)和静态地图元素(如车道线)。(1) tran、test和val数据配置 指定真值的文件路径: ann_file 指定输出处理的pipeline: 训练使用, test 和val使用 指定是否需要时序训练seq_mode (2)数据处理pipeline 自定义的Dataset 通过类实现,训

@bangbang的博客 719

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

QT的SQL模块 - QSqlTableModel的使用

1、SQLite是一种无需服务器、无需进行任何配置的数据库。2、SQLite是可以跨平台使用的数据库。3、SQLite的驱动库文件很小,包含完整功能的驱动可以小到只有500KB。QtSQL提供的主要类的简要功能描述如下图所示QSqlDatabase用于建立与数据库的连接,一般先加载需要的数据库驱动,然后设置数据库的登录参数。数据库的操作一般需要将数据库的内容在界面上进行显示和编辑,Qt采用Model/View结构进行数据库内容的界面显示。

weixin_56169816的博客 1758

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Qt使用QSqlTableModel界面显示用法(四、修改功能)

修改功能我用的方法也很简单,双击要修改的单元格,就可以弹出一个窗口,用于重新编辑。 要想使用tableview的双击功能,在ui界面上对tablevoew右击“转到槽”,选择doubleClicked(const QModelIndex &index)函数 在新建的函数体下写相应代码: QSqlTableModel * model = new QSqlTableModel(this,db);//新建model model->setTable("EXAMPLE");//设置表

yc__coder的博客 3551

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

【Qt入门第25篇】 数据库(五)SQL表格模型QSqlTableModel

可以看到这个模型很强大,而且完全脱离了SQL语句,就算你不怎么懂数据库知识,也可以利用它进行大部分常用的操作。我们也看到了,这个模型提供了缓冲区,可以先将修改保存起来,当我们执行提交函数时,再去真正地修改数据库。当然,这个模型比前面的模型更高级,前面讲的所有操作,在这里都能执行。

hw5230的博客 3832

Qt数据库练习之QSqlTableModel的使用(MySql数据库示例,含源码+注释)

一、各操作示例 提示:示例图中开始都先刷新了数据表,表明数据为最新数据;源码在本文第三节(源码含详细注释)。 1.1 修改记录(数据) 下图含手动更新记录和自动更新记录时的记录修改操作,其中前十秒是自动更新记录的操作,后十秒为手动更新记录的操作。 1.2 添加记录(数据) 下图为添加记录的操作,新添加的记录行的行标题是‘*’符号,并且当更新策略为手动更新时,需要手动保存记录。 1.3 删除记录(数据) 下图为删除记录的操作,删除后行的行标题变为‘!’,并且删除操作不区分自动/手动提交记录,无论怎样都是自

lw的博客 7694

Qt实战笔记-从零开始搭建一套库存管理系统-(五)使用QSqlTableModel实现数据的增删改查

上一章节我们已经通过用户注册和登录功能初步接触了数据库,主要是通过QSqlQuery来与数据库进行交互,这种方式呢有一定局限性,需要比较懂sql语句,而且调用起来比较麻烦。下面我们通过使用QSqlTableModel来和数据库交互,QSqlTableModel是一个Qt封装好的数据库模型类,关联好数据库和数据表之后,我们只需要和它打交道就可以操控数据库啦。 目录 1、创建数据表 2、构建UI...

hello_monster的博客 9987

QT之QSqlTableModel与tableview的使用

具体描述参考博客:https://blog.youkuaiyun.com/heaven_evil/article/details/77853998 QSqlTableModel *model = new QSqlTableModel(this, db); model-&gt;setTable("db_result_spine"); //指定模型要关联的表(emp...

kangshuaibing的博客 5762

Qt SQL:QSqlQueryModel、QSqlTableModel

Qt SQL:QSqlQueryModel、QSqlTableModel

友善啊,朋友的博客 4176

【QSqlTableModel】QT数据库的数据模型---QSqlTableModel

定义: 数据库的数据模型是将SQL语句对数据库的访问完全对象化,将SQL语句的执行封装成对象及其成员函数的实现,同时也对象化了QT的表格界面,实现了数据库访问的高耦合性,屏蔽了数据库访问的内部细节,将数据库的访问简化成调用对象的接口(成员函数)。 QSqlTableModle类: 成员函数: 1.绑定表格(数据库的表) [virtual] void QSqlTableModel::setTable(const QString &tableName); //传入表格名 2.插入 插入一条记录 --

皮皮不调皮的博客 6058

Qt: QSqlTableModel使用总结

自己写sal语句是这样的QStringsql=QString(“select*frombookwherebook_nameLIKE’%%1%’orderbypricedesc”).arg(bookName);使用场景你有一个db,你想将db中某张表的数据显示到界面上,用户可以在界面进行增删改查。这时候我们使用QSqlTableModel+QTableView的组合完成需求。现在你有一个book.db,里面有一张book表长这样。查询书籍,根据书名进行筛选并按价格降序排序。..................

weixin_45483780的博客 2209

Qt QSqlTableModel 使用心得

Qt  QSqlTableModel  使用心得 连接数据库 执行sql查询,条件显示,排序 获取记录数,列数以及记录内容,字段内容 新增,修改,删除,恢复 其它     1---------------连接数据库(我用的access2003做实验) 在.pro文件添加 QT  +=SQL win32:CONFIG+=console   -----------------

专注的力量 5万+
上一篇: Qt使用QSqlTableModel界面显示用法(四、修改功能)
下一篇: Qt使用QSqlTableModel界面显示用法-全代码(详细见之前博客)
巨蟹贼香
博客等级 码龄9年 76粉丝 43原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值