qt登录界面简单制作,是真的保姆级别了!!!
第二周工程创新实践:创建一个窗体,设计用户登录的界面(含有用户名、密码),并实现用户登录的功能,要求用户提交的登录按钮时能获取界面中的用户名、密码数据并与数据库中的数据进行匹配,若用户名,密码正确则登录成功,否则登录失败。
不想看的直接百度网盘吧,但是可以的话还是看一看,绝对是看得懂的
链接:https://pan.baidu.com/s/1NnnVLxBxThazBQojbft_rw
提取码:33qv
前期准备(qt创建和数据库表)
首先开始创建我们的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 <QMainWindow> 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 <QApplication> 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 <QSqlDatabase> #include <QMessageBox> #include <QSqlError> #include <QDebug> #include <QSqlQueryModel> #include <QComboBox> #include <QSqlQuery> 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);这一坨东西)
名字问题
像这个就是没有找到你输入框的名字,我们单机选中之后
这个就是的啦!把这个复制上去