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学习记录》等等吧。