第二周工程创新实践:创建一个窗体,设计用户登录的界面(含有用户名、密码),并实现用户登录的功能,要求用户提交的登录按钮时能获取界面中的用户名、密码数据并与数据库中的数据进行匹配,若用户名,密码正确则登录成功,否则登录失败。
不想看的直接百度网盘吧,但是可以的话还是看一看,绝对是看得懂的
链接:https://pan.baidu.com/s/1NnnVLxBxThazBQojbft_rw
提取码:33qv
首先开始创建我们的qt:
注意一定要是qmake!
然后一直点下一步就可以啦
得到这样的界面就可以啦
在前期我们需要安装一个my sql用于链接我们的数据库,以后看有机会出一个教程不,懒鬼!哈哈哈哈哈哈哈哈哈
如果不想改代码看这里,后面也可以自己来调整代码!!!
我们进入我们的my sql 里面
输入:show databases;
创建一个数据库:create database dbtest;
!!!一定要使用
进入数据库:use dbtest(数据库名);
使用查看当前数据库的表:show tables;
我们这个qt要用到下面的这个表如果没有就用:create table user(username varchar(8),password varchar(8));
insert into user(username,password) values('user01','abccba');
insert into user(username,password) values('1','21212121');
然后查看表:select * from user (表名);
像my sql数据库个人建议下一个软件来查看,真的方便很多
直接点击我们的ui
然后找到这三个控件
标签
输入框
按钮
我的布局
他们的ui名字在选中后都可以在,text那里改
在.pro那里面加一个 sql,我们要连接数据库咩
denglu.pro
QT += core gui 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 your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS
# You can also make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
SOURCES += \
main.cpp \
mainwindow.cpp
HEADERS += \
mainwindow.h
FORMS += \
mainwindow.ui
# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
然后我们就分为连接数据库和验证密码两个部分,所以在.h里面声明我们的bool connectDB();,验证我们用的是信号槽所以就不用声明了
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
bool connectDB();
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
我们的main.cpp不需要更改还是老样子
main.cpp
#include "mainwindow.h"
#include
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
关键部分来了
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include
#include
#include
#include
#include
#include
#include
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
connectDB();//调用数据库
//我们点击之后信号的触发
connect(ui->pushButton,&QPushButton::clicked,this,[=](){
QSqlQuery query1;
query1.exec("SELECT * FROM user WHERE username");//选择我们的表
QVariantList userlista;
QString usert;
usert=ui->lineEdit->text();//将我们ui界面输入框的值传递到usert里面
QString passwdt;
passwdt=ui->lineEdit_2->text();//将我们ui界面输入框的值传递到passwdt里面
bool T1=false;//设立判断标志
while(query1.next()){//这个回遍历数据库的值
qDebug()<<query1.value(0).toString();//在qt界面显示
qDebug()<<query1.value(1).toString();//在qt界面显示
if(query1.value(0).toString()==usert&&query1.value(1).toString()==passwdt){
T1=true;//判断密码和账号是否一致
}
}
if(T1==true){
QMessageBox::information(this, "成功", "登陆成功");
}
else { QMessageBox::information(this, "警告", "用户名或密码错误");}
query1.execBatch();//再次循环,没有这个你的按钮按一次就没有用了
});
}
bool MainWindow::connectDB(){
QSqlDatabase db=QSqlDatabase::addDatabase("QMYSQL");
db.setPort(3306);//你的地址
db.setHostName("localhost");
db.setUserName("root");//你的my sql的账号
db.setPassword("123456");//你进去时候输入的密码
db.setDatabaseName("dbtest"); //数据库名
if(!db.open()){
QMessageBox::critical(this,"数据库打开失败",db.lastError().text());
return false;
}
else {
return true;
}
}
MainWindow::~MainWindow()
{
delete ui;
}
数据库问题:
驱动失败(你要看看你有没有安装好一个.dll的资源)
添加链接描述
评论,私发
数据库失败(简单的来说就是没有找到你的my sql,你就要看看你dbtest有没有)
密码失败(就是密码错了)
数库库主机失败(QSqlDatabase db=QSqlDatabase::addDatabase(“QMYSQL”);
db.setPort(3306);这一坨东西)
名字问题
像这个就是没有找到你输入框的名字,我们单机选中之后
这个就是的啦!把这个复制上去