欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 维修 > Qt基础知识记录(终篇)

Qt基础知识记录(终篇)

2025/5/5 21:57:30 来源:https://blog.csdn.net/yxc_71411/article/details/147696845  浏览:    关键词: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学习记录》等等吧。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词