当前位置: 首页 > news >正文

Qt基础知识记录(终篇)

写在前面

        博主的项目所需知识已经差不多学完了,后续如果还需要再学习那就继续学,毕竟程序员就是摸着石头过河的,碰壁乃是常有的事情。博主的项目服务器是用MySQL存储数据的,所以博主学习一下Qt如何连接MySQL及从MySQL中存取数据

        博主的Qt是Qt6版本,这个版本需要专门将Qt与MySQL链接,博主已经配置好,不赘述了,如果有要在Qt中使用MySQL的同行,一定要先配环境

具体实现

(1)新建数据库

在MySQL命令行窗口里输入这些命令

mysql> create database testdatabase;
use testdatabase;
create table student (id integer unsigned primary key,name varchar(16) not null,birth date
)charset utf8;

(2)新建Qt项目

可以看到我的项目已经建好了,然后要注意:在pro文件里加上sql

QT       += core gui sql

(3)设计界面

并修改控件命名

这个项目要实现的功能是:点击查询,可以把信息显示到Qt下边的信息提示框;点击插入,在界面里输入的东西可以插到testdatabase里

(4)建立与MySQL的连接

先包含必要的头文件

#include<QSqlDatabase>
#include<QMessageBox>
#include<QSqlQuery>

在私有成员里声明数据库变量

QSqlDatabase db;

在构造函数里连接MySQL

db=QSqlDatabase::addDatabase("QMYSQL");db.setDatabaseName("testdatabase");
db.setHostName("localhost");
db.setUserName("root");
db.setPassword("*********");if(db.open())
{QMessageBox::information(this,"连接提示","连接成功");
}
else
{QMessageBox::warning(this,"连接提示","连接失败");
}

我来详细解释一下这段代码:

第一句是加载数据库驱动,因为Qt支持很多数据库,所以要先指定是MySQL数据库。

后边四句指的是连接一个叫做testdatabase的数据库,它的位置是主机,用户名是root,密码是**********。

然后是提示信息,如果成功连接的话就提示成功,不成功就报连接失败

                                                            

博主这里一切正常

(5)实现插入功能

右击插入按钮转到槽,在槽函数里写实现逻辑

void Widget::on_insertButton_clicked()
{QString id = ui->numberLineEdit->text();QString name = ui->nameLineEdit->text();QString birth =ui->birthLineEdit->text();QString sql = QString("insert into student values(%1,'%2','%3');").arg(id).arg(name).arg(birth);QSqlQuery query;if(query.exec(sql)){QMessageBox::information(this,"插入提示","插入成功");}else{QMessageBox::warning(this,"插入提示","插入失败");}
}

详细解释一下这段代码:

声明三个QString型变量,分别存储输入框里的学号、名字、生日

下一句是属于SQL的插入语句,这句的作用是把它放在MySQL里边,然后在MySQL里执行这一句。为了测试这句的真实性,可以提前写一句样板试试

insert into student values(1,"tom","1999-9-9");

这句话要替换的东西自然是id、name、birth,用Qt的高级语法来替换,类似于printf那种占位符,但是还要简洁一些。

然后是查询函数,查询sql这个变量有没有实现功能,如果实现的话就报成功,失败的话就报失败

测试结果如图:

在MySQL里同样有成功的结果:

                         

(6)实现查询操作

还是右击按钮转到槽,在槽函数里实现功能

void Widget::on_findButton_clicked()
{QSqlQuery query;query.exec("select * from student;");while(query.next()){qDebug()<<query.value(0);qDebug()<<query.value(1);qDebug()<<query.value(2);}
}

详细解释一下这段代码:

声明一个专用于查询的类的对象query,这个对象把构造函数里的语句放到MySQL里边,然后用一个循环来遍历查找的结果,query.next是指当前是不是最后一排数据,qDebug()函数可以在Qt下的输出框输出内容,value(0)指的是第一列数据,因为下标是从0开始的

运行结果也没问题:

功能优化

像上边提到的sql语句其实是比较笨的方法,Qt中开发者已经提供了很好的模型,我们直接用就行了,这里我要用一个叫做table view的控件

(1)再设计界面

利用Qstacked Widget控件,让输入是第一个界面,输出是第二个界面

以及下一页和上一页的槽函数:

void Widget::on_nextButton_clicked()
{ui->stackedWidget->setCurrentIndex(1);
}void Widget::on_frontButton_clicked()
{ui->stackedWidget->setCurrentIndex(0);
}

(2)使用table model

需要先包含头文件

#include<QSqlTableModel>

在构造函数里声明此类型变量

QSqlTableModel m;

在构造函数里初始化这个模型

if(db.open()){QMessageBox::information(this,"连接提示","连接成功");m = new QSqlTableModel;m->setTable("student");ui->tableView->setModel(m);}else{QMessageBox::warning(this,"连接提示","连接失败");}

先开一个m的空间,然后把它和MySQL里的student这张表连接起来,然后用tableView的setModel展示表格内容。注意:要在析构函数里释放m的空间

查询按钮的槽函数:

void Widget::on_getButton_clicked()
{m->select();
}

这个函数的意思是让数据库查询的结果和连接的table model连接起来

(3)效果展示

篇末总结

        《Qt基础知识记录》这个专栏我已经全部更新完了,博主是Qt小白,两个星期前从未接触过Qt,下载、安装、配环境都碰了不少壁。在b站里搜寻多方网课学习基础知识,算是勉强具备了Qt开发的能力。不过博主可能只会用Qt开发这一个项目了,因为相比于cpp,博主可能更想走java和go赛道,瓦go兼修,cpp仅仅是会用C++11就满意了。

        作为博主程序员历程接触的第一个语言,cpp伴随博主从无知走向青涩。博主从一个只知道玩电脑小游戏的菜鸡一步一步成长到现在,靠的都是cpp。如果可以博主想一直走cpp的,但是cpp这条赛道挺劝退人的,而且博主的学历bg也不是很好。做完本学期课设之后应该只有打a的时候会用cpp了。

        跟着网课一起做项目的效果是很明显的,因为博主在同时听算法课和Qt课,算法课没怎么动手,Qt课每节课博主都会跟着做。这次学习Qt的经历也告诉了我一定要边实践边听课。

        博主是编程界的小白,就想输出一些浅薄的见解,也算是一种学习,如果能让看到的人学到一些东西,我是非常开心的。

        目前博主是正在《数据结构和算法》、《基于Qt的基础知识记录》两个专栏,都是博主的思考和真实记录。后续会随着我的成长更新《java学习记录》、《go学习记录》、《MySQL学习记录》等等吧。

相关文章:

  • cloudfare+gmail 配置 smtp 邮箱
  • GPU集群训练经验评估框架:运营经理经验分析篇
  • load_dotenv()详解
  • 《算法导论(第4版)》阅读笔记:p6-p6
  • GCC 使用指南
  • idea创建springboot工程-指定阿里云地址创建工程报错
  • Spring AI聊天模型API:轻松构建智能聊天交互
  • 每日c/c++题 备战蓝桥杯(洛谷P1190 [NOIP 2010 普及组] 接水问题)
  • 【心海资源】子比主题新增注册与会员用户展示功能模块及实现方法
  • Maven框架详解:构建与依赖管理的利器
  • Linux 入门:操作系统进程详解(上)
  • ARM Linux 设备树
  • 视频编解码学习三之显示器
  • 2021年第十二届蓝桥杯省赛B组Python题解
  • 第三节:OpenCV 基础入门-安装与配置 OpenCV (Python/C++ 环境)
  • 五四青年节|模糊的青春岁月,用视频高清修复工具,让回忆更清晰!
  • C++ 的类型排序
  • 【PostgreSQL数据分析实战:从数据清洗到可视化全流程】3.1 数据质量评估指标(完整性/一致性/准确性)
  • Git 命令
  • Spring Cloud Gateway MVC 基于 Spring Boot 3.4 以 WAR 包形式部署于外部 Tomcat 实战
  • 新华社:让历史照鉴未来
  • 普京称俄中关系对维护世界稳定具有战略意义
  • 浙江医生举报3岁男童疑遭生父虐待,妇联:已跟爷爷奶奶回家
  • 英国传统两党受挫地方选举后反思,改革党异军突起“突破想象”
  • 马克思主义理论研究教学名师系列访谈|薛念文:回应时代课题,才能彰显强大生命力
  • 李在明涉嫌违反《公职选举法》案将于15日进行首次重审公审