Qt使用QSqlTableModel界面显示用法(二、添加功能)

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

根据上一次的讨论,这次我们来研究一下QSqlTableModel的添加方法。

首先新建一个Qt界面类

用dialog界面,因为我们需要dialog的exec()接口。命名为AddRecord。内部结构大致为

// h文件
#ifndef AddRecord_H
#define AddRecord_H

#include <QDialog>

namespace Ui {
class AddRecord;
}

class AddRecord : public QDialog
{
    Q_OBJECT

public:
    explicit AddRecord(QWidget *parent = nullptr);
    ~AddRecord();
    QString * str;

private slots:
    void on_pushButton_clicked();

private:
    Ui::AddRecord *ui;
};

#endif // AddRecord_H


// cpp
#include "AddRecord.h"
#include "ui_AddRecord.h"

AddRecord::AddRecord(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::AddRecord)
{
    ui->setupUi(this);
    this->str = new QString[3];
}

AddRecord::~AddRecord()
{
    delete ui;
}

void AddRecord::on_pushButton_clicked()
{
    this->str[0] = ui->lineEdit->text();
    this->str[1] = ui->lineEdit_2->text();
    this->str[2] = ui->lineEdit_3->text();
    this->hide();
}

// ui文件略

然后稍微设计一下界面窗口

这个界面就是添加的数据了,id是我们设定的主键值,随数据自动增长,所以不需要手动输入。

既然是添加操作,我们肯定要添加槽函数,在主ui下的添加按钮右击选择“转到槽”,一般选择默认的click()函数即可。
在.cpp函数下会显示

void MainWindow::on_pushButton_clicked()
{

}

在此输入添加代码即可

void MainWindow::on_pushButton_clicked()
{
    AddRecord * add = new AddRecord(this);//新建界面对象
    add->exec();//显示界面,且进程停止在此,除add界面外无法操作其它界面

    QString *str = add->str;
    //以下就是插入函数的基本语句了
    QSqlTableModel * model = new QSqlTableModel(this,db);
    model->setTable("EXAMPLE");
    int row = model->rowCount();
    model->insertRow(row);
    model->setData(model->index(row,1),str[0]);
    model->setData(model->index(row,2),str[0]);
    model->submitAll();//提交插入的数据
    ui->tableView->setModel(model);//设置model模型
    model->select();//显示
}

以上语句相当于插入数据语句

insert into EXAMPLE (name,age,city) values ('张三',22'南京')

如图!

做到这个地步大家会发现,在打开界面后直接关闭,仍然有空数据插入到数据库中。那是因为在执行exec后,无论怎样关闭,都会继续执行插入的后续语句,所以我们要在exec()后添加用户是否按下完成按钮的判断。

在addrecord.h中添加语句

public:
	bool isClicked = false;

在addrecord.cpp中void AddRecord::on_pushButton_clicked()添加

isClicked = true;

原插入函数修改为

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");
    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();//显示
}

这个时候只要不点击完成按钮就不会有数据插入了!
。
。
。
。
。
。
!!!在此申明一下为什么用exec() 接口!!!
比如说insertDialog使用exec显示界面,程序会进入循环,等待你对执行exec这个insertDialog的操作。当你关闭insertDialog类窗口时,程序会继续执行接下来的代码,所以当你在exec循环里时,原窗口会拒绝一切操作。
而如果使用show的话,你会发现对话框会很快自动关闭,因为,show不会进入循环,它执行完后会继续执行下面语句,而你什么都没输入,完全不顾及你的感受!
具体参考大佬解释:https://www.devbean.net/2012/09/qt-study-road-2-dialogs-intro/

~~~
继续下一章:删除功能

关于QSqlTableModel的使用说明(QT上创建本地SQL) 前言:通常我们操作数据库时,需要使用sql语句;在qt开发环境中提供了QSqlTableModel类,它可以通过简单的接口去操作数据库,即使不熟悉sql语句也可以对数据库进行大部分的操作,而且该模型还具有数据缓存功能,在修改数据后并不是立刻同步到数据库中,允许用户进行数据撤回,如果已经提交到数据库的数据就不能进行撤回了;QSqlTableModel还有一个非常方便的操作就是它可以将数据库的所有记录显示到QTableView控件上,并可以直接通过QTableView控件对数据库任意位置的数据进行修改。下面就Q 阅读详情

相关推荐

qt QSqlTableModel在tableview显示checkbox添加复选框

参考了几篇大佬的博客 QMap用法: QT QMap介绍与使用. tableview显示checkbox添加复选框: sql QtableView中添加复选框. Qt 之 QTableView 添加复选框(QAbstractTableModel). .h文件 #ifndef QSQLBUGMODEL_H #define QSQLBUGMODEL_H #include <QSqlTableM...

weixin_43387612的博客 3046

Qt: QSqlTableModel使用总结

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

weixin_45483780的博客 2209

qt4到qt5使用qsqltablemodel的变化

查到了qt5的变更列表,在设计qsqltablemodel时有下面变化。 QtSql-----QSqlQueryModel/QSqlTableModel/QSqlRelationalTableModel* The dataChanged() signal is now emitted for changes made to an insertedrecord that has n

Big__Fly的专栏 1742

QT 使用QSqlTableModel对数据库进行创建,插入,显示

本案例用于对数据库中的数据进行显示等其他操作,其他表格筛选,过滤等功能可看此博客框架:数据模型使用,视图使用QTableView,表格的一些字体或者控件之类的使用实现。导航栏的变化实时的传回给表格,所有的数据库表都实现继承一个表格类,根据表格本身的特性可以设置自己的委托。数据库使用一个单列类进行管理,包括数据库的读取,创建,数据插入,以及对模型的映射等。使用的数据库类型为QPSQL知识理应共享,源码在此。

Ray 1889

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自定义tableModel和使用sqltablemodel

QT自定义tableModel和使用sqltablemodel

[Qt教程] 第25篇 数据库(五)SQL表格模型QSqlTableModel

[Qt教程] 第25篇 数据库(五)SQL表格模型QSqlTableModel 楼主  发表于 2013-5-21 20:36:22 | 查看: 923| 回复: 7 SQL表格模型QSqlTableModel 版权声明 该文章原创于作者yafeilinux,转载请注明出处! 导

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

移动端抓包实战指南:从HTTPS解密到QUIC协议与证书绑定破解

HTTPS作为保障网络通信安全的核心协议,其工作原理基于TLS/SSL加密与证书信任链验证。在移动应用开发与测试中,抓包是调试接口、分析性能、排查问题的关键技术手段。然而,随着移动端安全性的提升,传统的代理抓包方法常因证书绑定、HTTP/3/QUIC协议等挑战而失效。这要求开发者掌握分层诊断思维,协同使用代理工具、协议分析工具及底层流量捕获工具。例如,面对证书绑定导致的流量不可见,需借助Wireshark进行协议层分析;针对基于UDP的QUIC协议,则需使用支持该协议的抓包工具或临时禁用特性。本文聚焦移动端

weixin_27722377的博客 298

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

众所周知,查询功能是所有基础操作中最麻烦的功能。

yc__coder的博客 7468

忘记安卓锁屏密码怎么办?3种方法教你用ADB恢复访问(含gesture.key解密)

本文详细解析了安卓设备锁屏密码的存储与加密机制,特别是gesture.key文件的解密原理。针对遗忘密码的常见问题,提供了三种核心恢复方法:利用ADB调试接口删除密码文件、对gesture.key进行离线分析与解密,以及应对高版本系统的替代方案。重点介绍了通过ADB工具在Recovery模式下操作的具体步骤,帮助用户在合法合规前提下恢复设备访问权限。

php55的博客 959

吉林大学2016级唐班c语言期末考试B卷

` #include<stdio.h> #include<stdlib.h> //双指针法,每次从a,b中选一个最大的数,从后向前一次放在数组a中 int merge(int *a,int m,int *b,int n){ int i=m-1,j=n-1,k=m+n-1; while(i>=0&&j>=0){ if(a[i]>b[j])a[...

weixin_42339173的博客 1195

Qt使用QSqlTableModel界面显示用法(一、默认显示)

这是我的第一篇博客 如果有写的不好的地方请谅解 我会好好学习的! 首先qt使用数据库可以用最基本的exec执行语句,但是本章节我要介绍的是qt中自带的qsqltablemodel来显示数据库的数据。 i

yc__coder的博客 7659

使用python对创芯科技CANalyst-II分析仪进行二次开发(详细教程)

使用python对创芯科技CANalyst-II分析仪进行二次开发

ningqingzy的博客 1万+

Qt使用QSqlTableModel界面显示用法(三、删除功能)

删除功能,为了介绍方便,我将采用选中当前行进行删除操作 当然,考虑到误操作的可能性,我们在删除前会进行提示,提示我们选择使用QMessageBox 代码如下: void MainWindow::on_pushButton_2_clicked() { int row = ui->tableView->currentIndex().row();//记录当前选择行 if(QMessageBox::Yes == QMessageBox::question(this,"Make Sure"

yc__coder的博客 2743

《计算机视觉:从入门到精通》技术手册 第1章 计算机视觉概述与历史演进

视觉感知与机器视觉在工程实践中常被混用,但二者存在本质差异。视觉感知强调对光学信号的语义理解与场景解释,核心在于从二维投影重建三维世界的物理与语义属性。该领域关注遮挡处理、光照变化、材质反射等复杂因素的建模,其目标是实现类似人类视觉系统的场景理解能力。机器视觉则侧重于工业场景中的精密测量与控制,通常基于结构化光源、已知几何约束与标定参数,执行边缘检测、尺寸测量、位置定位等任务。前者面向开放环境的通用理解,后者面向受控环境的精确执行。

u012133341的博客 269

1、CUDA 编程基础

GPU计算的发展历程与重要性。首先回顾了计算机技术的发展,特别是摩尔定律的影响,强调了计算能力的快速提升。然而,随着晶体管尺寸的缩小和频率的停滞,单线程性能增长放缓。为了继续提升性能,多核处理器开始普及,促使软件开发者开始考虑并行计算。介绍了延迟导向设计和吞吐量导向设计的概念,CPU和GPU分别代表了这两种设计方法。GPU是吞吐量导向的,拥有众多弱小的ALU,通过流水线处理提高算术吞吐量。GPU的成功在于其高并行性和高吞吐量,以及能够分摊高昂的固定成本的大量销售额。

Justinyh的博客 580

【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万+

qq对接openclaw,通过qq发送命令

把 OpenClaw 接入 QQ 和微信,目前主流的微信文章和教程主要提供了两种截然不同的路径。我为你梳理了它们的核心区别和关键步骤,你可以根据自己的需求来选择。

suny8的专栏 270

QT的SQL模块 - QSqlTableModel的使用

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

weixin_56169816的博客 1758

SAP在sap我定义了三个帐套 T9 SGD,I9 CNY, C9 CMY 想使用三个不同的币种,那么 我在定义和激活非主分类账时 如何定义各自的币种 ?

摘要:在SAP中为非主分类账(T9、I9、C9)配置不同币种(SGD、CNY、MYR),需通过三个步骤实现:1)在FINSC_LEDGER中定义分类账货币类型;2)在OB22中为公司代码0919配置平行货币;3)在"定义和激活非主分类账"中关联币种。关键注意事项包括维护自定义货币类型(以Y/Z开头)、设置OB08汇率以及独立汇率评估。完成后可通过FB50测试凭证和FAGLL03验证各账套的币种金额显示。

金牌架构师 1012

Statistics and Machine Learning Toolbox

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

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

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

yc__coder的博客 3551

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

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

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

lw的博客 7694

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Qt使用QSqlTableModel界面显示用法-全代码(详细见之前博客)

.pro QT += core gui QT += sql greaterThan(QT_MAJOR_VERSION, 4): QT += widgets CONFIG += c++11 # The following define makes your compiler emit warnings if you use # any Qt feature that has been marked deprecated (the exact warnings # depend on yo.

yc__coder的博客 1657

Qt SQL:QSqlQueryModel、QSqlTableModel

Qt SQL:QSqlQueryModel、QSqlTableModel

友善啊,朋友的博客 4176

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使用QSqlTableModel界面显示用法(一、默认显示)
下一篇: Qt使用QSqlTableModel界面显示用法(三、删除功能)
巨蟹贼香
博客等级 码龄9年 76粉丝 43原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值