目录
参考文章
一、 QT页面跳转
前言
本次项目是基于QT和MYSQL做的学生信息管理系统,关键点就是对数据库的增删改查。
成品展示
一、QT连接MySQL和MySQL增删改查
1.连接配置
1.1.qt项目文件(xxx.pro)中加入QT += sql
1.2.包含数据库头文件 #include <QSqlDatabase>
1.3.连接数据库
void connectMysql()
{
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("127.0.0.1");//连接本地主机
db.setPort(3306); //端口
db.setDatabaseName("user"); //数据库名
db.setUserName("root"); //用户名
db.setPassword("root"); //用户密码
bool ok = db.open(); //打开数据库
if (!ok){
//msgbox msg(NULL,"提示","连接数据库失败!",msgbox::btok);msgbox是我自定义的
QMessageBox::information(NULL,"提示","连接数据库失败!");
//msg.exec();
exit(0);
}
else {
}
return;
}
2.SQL命令,增删改查
QSqlQuery query;
//创建表
if(!query.exec("create table inf(id int,name char(32),age int,sex char(8),score float);"))
{
qDebug()<<"create table failed!";
}
//增
int id = 1;
QString name = "张三";
QString sql = QString("insert into user (id,name)values(%1,'%2')").arg(id).arg(name);
if(query.exec(sql))
{
}else{
}
//删
query.prepare(QString("delete from user where name='%1'").arg(name));
query.exec();
//改
sql = QString("update user set id=2,name='李四' where name='%1';").arg(name);
if(query.exec(sql))
{
}else{
}
//查
sql = QString("select* from user where id=%1 AND name='%2';").arg(id).arg(name);
query.exec(sql);
if(query.size() < 1)
{
qDebug()<<"query.size() 为查询的结果条数为零就是没找到";
}
while(query.next())//循环打印
{
qDebug()<<query.value("id").toString();
qDebug()<<query.value("name").toString();
}
创建表,需要两个表,一个存用户名和密码,一个存学生信息。可以直接使用DBaver等软件创建,也可以使用命令创建。
二、注册登录
1.页面跳转方法
注册和登录页面是需要相互跳转的。点击注册按钮就隐藏登录界面显示注册界面。
我们这里使用槽函数实现页面跳转。
* 界面跳转步骤
* 1.在该页面的头文件中加入型号signal:void showxxx();
signals:
void showmain();
void showreg();
* 2.在注册按钮槽函数 emit showxxx(); 激活信号
void ui_login::on_login_bt_reg_clicked()
{
this->hide(); //隐藏本界面
emit showreg(); //激活信号
}
* 3.找到需要跳转到的页面的.h文件,并在文件中定义一个接收发射信号的槽:
private solts: void recivelogin();
* 4.实现槽函数
void reg::recivelogin()
{
this->show(); //显示本页面
}
* 5.在主函数使用connect函数将你所定义的信号和槽连接起来
QObject::connect(&w, SIGNAL(showmain()),&w2,SLOT(recivelogin()));
//第一个参数为发送信号的界面对象,第二个参数为信号,第三个参数为被跳转界面的对象,第四个参数为接收信号的槽函数。
2.注册界面
2.1 ui设计自己怎么喜欢怎么搞。把需要lineEdit和pushButton对象名改成自己容易记的名字。
用户名和密码是两个lable, 输入框是lineEdit.,lineEdit默认显示是设置placeholderText
2.2 注册功能实现
注册功能主要就是要点击注册按钮,然后把lineEdit里面的数据插入数据库。
右键注册转到clicked()槽
在槽函数里面把获取lineEdit数据在使用SQL语句插入就行。
void reg::on_reg_bt_reg_clicked()
{
QSqlQuery query;
QString username = ui->reg_usr->text();
QString passwd =ui->reg_passwd->text();
QString sql = QString("insert into usr (name,passwd)values('%1','%2');").arg(username).arg(passwd);
insertdata(sql);
}
2.3 返回按钮就是页面跳转,参考上面页面跳转步骤
3.登录界面
3.1 ui设计 和注册页面几乎一样,看自己喜欢就怎么设计。
密码框可以设置 echoMode属性为Password实现密码不可见
3.2 登录按钮
注册按钮需要实现点击按钮就会获取用户输入的数据然后再去数据库中查询,如果查到了就跳转主页面,没查询到就提示密码或用户名错误。
首先转到登录按钮槽函数
void ui_login::on_login_bt_login_clicked()
{
QSqlQuery query;
//获取用户输入的用户名和密码
QString name = ui->login_usrname->text();
QString passwd = ui->login_passwd->text();
//query.prepare("select *from usr where name='"+name+"' AND passwd='"+passwd+"';");
//查询数据 查询条件为name and passwd同时匹配
QString sql = QString("select *from usr where name='%1' AND passwd='%2'").arg(name).arg(passwd);
query.exec(sql);
if(query.size() < 1) //如果查询的数据结果数小于一,则说明没有用户名或者密码不对。
{
QMessageBox::information(NULL, "infor", "username or passwd error!");
}else//密码匹配跳转到主界面
{
QMessageBox::information(NULL, "infor", "login success!");
this->hide();
emit showmain();
}
}
3.3 注册按钮
注册按钮就是页面跳转,参考上面页面跳转步骤
三、主界面
主界面左边是一个QtableWidget控件表格的形式显示学生信息,右边就是文本框和按钮。
查询数据库并添加到QtableWidget里面就行
void MainWindow::updateTableview()
{
QSqlQuery query;
getInfo(query);
ui->tableWidget->clearContents();
ui->tableWidget->setRowCount(0);
while(query.next()) //循环插入
{
int rowcount = ui->tableWidget->rowCount(); // 获取当前行数
ui->tableWidget->insertRow(rowcount); //插入一行
ui->tableWidget->setItem(rowcount,0,new QTableWidgetItem(query.value("id").toString()));
ui->tableWidget->setItem(rowcount,1,new QTableWidgetItem(query.value("name").toString()));
ui->tableWidget->setItem(rowcount,2,new QTableWidgetItem(query.value("age").toString()));
ui->tableWidget->setItem(rowcount,3,new QTableWidgetItem(query.value("sex").toString()));
ui->tableWidget->setItem(rowcount,4,new QTableWidgetItem(query.value("score").toString()));
}
return;
}
然后功能面板就是对数据库的增删改查。
添加功能就是自定义一个dialog窗口,获取用户数据插入到数据库就行。
修改也是自定一个窗口,然后打开窗口的时候用信号和槽的方式把学生名字传递给子dialog,把获取的信息展示在修改窗口,用户修改后再获取lineEdite的数据更新到数据库就行。
总结
第一次写博客,对于很懒的我来说,迈出这一步很不错了,哈哈哈。这篇文章有很多的不足啊,很多细节我都没有写出来,原因就是我太懒了,不想写了,有不懂的可以在评论一起讨论哈,我也是小白,我们相互讨论,相互学习,共同进步。