QT 简单的登录界面

article/2025/9/15 3:51:37

一、描述
有登录界面、注册界面,用到sqlite数据库保存账号和密码,界面还没有布局美化等,只实现了最基本的功能。

二、界面及功能介绍
1、登录界面在这里插入图片描述2、注册界面在这里插入图片描述
3、主界面
没想好弄啥功能,于是就弄了两个按钮。
在这里插入图片描述
4、文件结构
在这里插入图片描述

三、代码

1.login.pro

QT       += core gui
QT       += sql widgetsgreaterThan(QT_MAJOR_VERSION, 4): QT += widgetsCONFIG += 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.0SOURCES += \general.cpp \logindialog.cpp \logondialog.cpp \main.cpp \widget.cppHEADERS += \general.h \logindialog.h \logondialog.h \widget.hFORMS += \logindialog.ui \logondialog.ui \widget.ui# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

2.general.h

#ifndef GENERAL_H
#define GENERAL_H#include <QSqlDatabase>
#include <QDebug>
#include <QStringList>
#include <QSqlQuery>
#include <iostream>
#include <QMessageBox>QSqlQuery connect_sqlite();
void sql_close();#endif // GENERAL_H

3.logindialog.h

#ifndef LOGINDIALOG_H
#define LOGINDIALOG_H#include <QDialog>
#include "logondialog.h"
#include "ui_logondialog.h"namespace Ui {
class LoginDialog;
}class LoginDialog : public QDialog
{Q_OBJECTpublic:explicit LoginDialog(QWidget *parent = nullptr);~LoginDialog();LogonDialog logondialog;private slots:void on_pushButton_clicked();void on_pushButton_2_clicked();void on_pushButton_3_clicked();void on_pushButton_4_clicked();private:Ui::LoginDialog *ui;
};#endif // LOGINDIALOG_H

4.logondialog.h

#ifndef LOGONDIALOG_H
#define LOGONDIALOG_H#include <QDialog>
#include "general.h"namespace Ui {
class LogonDialog;
}class LogonDialog : public QDialog
{Q_OBJECTpublic:explicit LogonDialog(QWidget *parent = nullptr);~LogonDialog();public:Ui::LogonDialog *ui;
private slots:void on_pushButton_2_clicked();void on_pushButton_clicked();
};#endif // LOGONDIALOG_H

5.widget.h

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include "logindialog.h"
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();private slots:void on_pushButton_2_clicked();private:Ui::Widget *ui;
};
#endif // WIDGET_H

6.general.cpp

#include "general.h"
QSqlDatabase db;
QSqlQuery connect_sqlite()
{//验证数据库连接是否存在,不存在就创建一个if(QSqlDatabase::contains("first")){db = QSqlDatabase::database("first");}else{//用的是sqlite数据库db = QSqlDatabase::addDatabase("QSQLITE","first");db.setDatabaseName("QtQq.db");//设置数据库名称,若不存在自动创建一个db.setUserName("zhanglinghua");//设置数据库账号,不用也没啥问题db.setPassword("123456");      //设置数据库密码,不用也没啥问题}bool a = db.open();            //打开数据库,必须打开才能进行增删查改的操作if(!a){qDebug()<<"数据库打开失败";exit(100);}else{qDebug()<<"数据库打开成功";}QSqlQuery sql_query(db);return sql_query;
}void sql_close()
{db.close();
}

7.logindialog.cpp

#include "logindialog.h"
#include "ui_logindialog.h"LoginDialog::LoginDialog(QWidget *parent) :QDialog(parent),ui(new Ui::LoginDialog)
{ui->setupUi(this);
}LoginDialog::~LoginDialog()
{delete ui;
}//验证登录函数
void LoginDialog::on_pushButton_clicked()
{QSqlQuery sql_query = connect_sqlite();QString user = ui->lineEdit->text();//获取账号QString pwd = ui->lineEdit_2->text();//获取密码//qDebug()<<user<<pwd;//先验证账号是否存在,若存在,再验证密码QString user_sql = QString("select user from users;");sql_query.exec(user_sql);bool flag=0;while(sql_query.next()){if(sql_query.value(0).toString()==user){flag=1;}}if(flag==1){QString sql = QString("select passwd from users where user = '%1'").arg(user);//验证账号密码sql_query.prepare(sql);sql_query.exec();QString sql_pwd;while(sql_query.next()){sql_pwd = sql_query.value(0).toString();qDebug()<<"密码"<<sql_pwd;}if(pwd == sql_pwd){qDebug()<<"登录成功";accept();}else{QMessageBox::information(this,QObject::tr("登录提示"),QObject::tr("账号或密码错误"),QMessageBox::Ok,QMessageBox::Ok);}}else{QMessageBox::information(this,QObject::tr("登录提示"),QObject::tr("未发现该账号,请先注册。"),QMessageBox::Ok,QMessageBox::Ok);}}//关闭注册窗口
void LoginDialog::on_pushButton_2_clicked()
{close();
}//显示注册窗口
void LoginDialog::on_pushButton_3_clicked()
{LogonDialog lgo;lgo.setWindowTitle("注册");lgo.exec();
}//忘记密码函数
void LoginDialog::on_pushButton_4_clicked()
{QMessageBox::information(this,QObject::tr("密码"),QObject::tr("忘记了也没办法,大哥重新注册一个吧。"),QMessageBox::Ok,QMessageBox::Ok);
}

8.logondialog.cpp

#include "logondialog.h"
#include "ui_logondialog.h"LogonDialog::LogonDialog(QWidget *parent) :QDialog(parent),ui(new Ui::LogonDialog)
{ui->setupUi(this);
}LogonDialog::~LogonDialog()
{delete ui;
}//注册功能实现函数
void LogonDialog::on_pushButton_2_clicked()
{QString user = ui->lineEdit->text();QString pwd = ui->lineEdit_2->text();QString enter_pwd = ui->lineEdit_3->text();if(user==""||pwd==""||enter_pwd==""){QMessageBox::information(this,QObject::tr("注册提示"),QObject::tr("输入不能为空,请重新输入!"),QMessageBox::Ok,QMessageBox::Ok);}else{QSqlQuery sql_query=connect_sqlite();QString logon_sql = QString("select user from users;");sql_query.exec(logon_sql);while(sql_query.next()){if(sql_query.value(0).toString()==user){QMessageBox::information(this,QObject::tr("注册提示"),QObject::tr("未能注册,账号已存在,请更换账号后重新尝试注册!"),QMessageBox::Ok,QMessageBox::Ok);}}if(pwd!=enter_pwd){QMessageBox::information(this,QObject::tr("注册提示"),QObject::tr("未能注册,两次密码输入不一致,请重新输入!"),QMessageBox::Ok,QMessageBox::Ok);}else{QString insert = QString("insert into users values('%1','%2');").arg(user).arg(pwd);if(sql_query.exec(insert)){QMessageBox::information(this,QObject::tr("注册提示"),QObject::tr("注册成功!"),QMessageBox::Ok,QMessageBox::Ok);}else{QMessageBox::information(this,QObject::tr("注册提示"),QObject::tr("未能注册,请尝试重新注册!"),QMessageBox::Ok,QMessageBox::Ok);}}sql_close();}
}//关闭注册窗口
void LogonDialog::on_pushButton_clicked()
{close();
}

9.main.cpp

#include "widget.h"#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);QStringList dr = QSqlDatabase::drivers();//查看有哪些数据驱动,原本想用MySQL数据库,但是我qt里没驱动,自己捣鼓了半天也没成功,就直接用sqlite数据库了foreach(QString driver,dr)qDebug()<<driver;QString sql = "create table users(user varchar(40) primary key,passwd varchar(40));";QString judgmen_table_exist = "select count(*) from users where user = 'z';";QSqlQuery sql_query1=connect_sqlite();bool flag = sql_query1.exec(judgmen_table_exist);if(!flag){flag = sql_query1.exec(sql);if(flag){qDebug()<<"user table create success";}else{qDebug()<<"user table create error";}}sql_close();LoginDialog logindialog;logindialog.setWindowTitle(QObject::tr("登录"));if(logindialog.exec()==QDialog::Accepted){Widget w;w.setWindowTitle(QObject::tr("QtQq"));w.show();return a.exec();}elsereturn 0;
}

10.widget.cpp

#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);
}Widget::~Widget()
{delete ui;
}//重新登录功能实现函数
void Widget::on_pushButton_2_clicked()
{close();LoginDialog ldg;if(ldg.exec()==QDialog::Accepted)show();
}

http://chatgpt.dhexx.cn/article/7YhZw9X5.shtml

相关文章

(四) 制作一个最简单的qt界面

前面我们学了 (一) 在Windows上搭建Qt环境 (二) Qt新建Android工程 (三) Qt入门篇之C基础 今天我们用Qt制作一个最简单的qt登录界面 一、在PC机上运行 1.QT基础 1.qt的移植性非常强&#xff0c;一套代码我们不用改的太多&#xff0c;直接通用所有的平台,不久的将来&#xff…

【Qt登录界面】

Qt登录界面 文章目录 Qt登录界面前言一、创建项目二、创建数据库及用户表三、登录界面设计四、注册界面设计五、效果图六、参考教程 前言 第一次在这上面写文章&#xff0c;没啥经验&#xff0c;如果有啥不当的地方&#xff0c;请各位大佬批评指正。我刚学Qt不久&#xff0c;结…

QT 简单的QT用户登录界面

简单的QT用户登录界面 一、简单描述 在登录界面输入用户名和密码正确之后才进入欢迎界面。 例子打包&#xff1a;链接: https://pan.baidu.com/s/1HEpNFghMDrBguMt93aRJ_A 提取码: bg4n 二、效果 三、工程文件结构 四、源文件 1、LoginForm02.pro文件 QT widgets guiSOUR…

一文读懂qt界面设计(分裂器,布局,拉伸,各种属性设置)

可以先看看我这个文章&#xff1a;qt关于界面设计中的一些知识总结_我是标同学的博客-CSDN博客_qt 水平伸展 现在我们来正式开始讲解。 布局种类 qt中能称为布局管理器的有如下6个&#xff1a; 水平布局&#xff08;QHBoxLayout&#xff09;垂直布局&#xff08;QVBoxLayout…

Qt界面开发(一)(各种控件以及图表)

注&#xff1a;资源主要来源&#xff1a;http://www.qtcn.org/bbs/u/110085 &#xff08;刘大神&#xff09; 如若侵权&#xff0c;请联系删除。 本文只是将作品集合到起来&#xff0c;方便大家一起学习。 资源集合已经放到 链接&#xff1a;https://pan.baidu.com/s/1sVvQE8…

嵌入式学习之QT学习----3 制作简单的QT界面(如:QQ登录界面)

1、创建一个QT工程 new project —> Application —> Qt Widgets Application —> choose…&#xff08;注意不要有中文路径&#xff09;填写名称&#xff08;我写的名称为class2&#xff09;和创建路径&#xff08;D:\qt\qt_demo\class2&#xff09; —> 填写类名…

QT界面布局和设计

一、设计 对功能和模块进行分析&#xff0c;然后设计对应的模块&#xff0c;将每个模块都用widget展示作为组件。工程结构示例&#xff1a;二、完成模块 代码分别设计各个组件&#xff0c;合适即可三、主界面连接 主界面连接各个子模块。在这里插入代码片#include "AutoFl…

tomcat配置url跳转_tomcat安装目录详解

打开tomcat的解压之后的目录可以看到如下的目录结构&#xff1a; 1.bin&#xff1a; bin目录主要是用来存放tomcat的命令&#xff0c;主要有两大类&#xff0c;一类是以.sh结尾的&#xff08;linux命令&#xff09;&#xff0c;另一类是以.bat结尾的&#xff08;windows命令&a…

【转】URL访问地址和Tomcat项目部署中不得不说的小秘密(JAVA之Tomcat服务器)

今天来简单讲讲tomcat项目部署和url地址访问栏的关系&#xff0c;顺便和大家分享下&#xff0c;叙述不当之处&#xff0c;还请大家多多指导&#xff01; 众所周知&#xff0c;Tomcat项目发布的默认访问地址格式如下&#xff1a;http://localhost:8080/MyDemo/index.jsp 由于we…

tomcat配置url跳转_Tomcat

Tomcat介绍 1.Web服务器介绍 Web服务器可以解析HTTP协议,收到请求后可以进行响应,比如响应静态资源、进行页面跳转等 Web服务器响应可委托给CGI脚本、JSP脚本、ASP脚本、服务器端JS等程序或其它服务器端技术 Web服务器通常产生一个html响应以便浏览器浏览 2.常见Web服务器 We…

web服务之Tomcat

目录 Tomcat介绍 Tomcat组件 Tomcat组件 JavaServlet JSP容器 Tomcat部署步骤 关闭防火墙&#xff0c;将安装 Tomcat 所需软件包上传到 /opt 目录下 安装 JDK 设置 JDK 环境变量 安装启动 Tomcat tomcat的主要目录 Tomcat 虚拟主机配置 创建test1和test2项目目录和文…

Tomcat实现Https服务

Tomcat实现Https服务 1、JDK生成证书 进入JDK/bin目录键盘按下shift 鼠标右键&#xff0c;选择“在此处打开命令窗口”打开DOS命令窗键入命令”keytool -v -genkey -alias myKey -keyalg RSA -keystore F:/jdk1.6.0_45/myKey.keystore” 证书密码123456 2、配置tomcat 配置…

【转】URL访问地址和Tomcat项目部署中不得不说的小秘密

今天来简单讲讲tomcat项目部署和url地址访问栏的关系&#xff0c;顺便和大家分享下&#xff0c;叙述不当之处&#xff0c;还请大家多多指导&#xff01; 众所周知&#xff0c;Tomcat项目发布的默认访问地址格式如下&#xff1a;http://localhost:8080/MyDemo/index.jsp 由于we…

【tomcat路径匹配源码分析】搞懂tomcat中web.xml配置servlet的url-pattern为“/“和“/*“的区别

搞懂tomcat中web.xml配置servlet的url-pattern为"/"和"/*"的区别 前言结论Servlet匹配规则&#xff08;tomcat源码&#xff09;分析举个例子路径配置为/导致拦截静态资源问题的解决方案 总结 原文地址 前言 我在写原生javaWEB项目时&#xff0c;想通过注册…

通过URL请求tomcat服务器直接下载文件

从一个服务器上下载文件&#xff0c;是很常见的情况。通常我们想通过URL来访问直接下载一个文件&#xff0c;对于Tomcat服务器而言&#xff0c;是非常简单的&#xff0c;Tomcat本身就是作为一个web服务器的&#xff0c;通过简单的配置就可以实现。 配置如下&#xff1a; 1、在…

tomcat配置使得访问http协议(或者直接输入www.网址.com) 直接跳转访问https协议

由于https协议比http协议安全,但是如果网站安装了ssl(如果没有安装,可百度搜索"阿里云ssl免费证书",阿里官网会提供安装方法,比较简单),发现每次输入网址必须得手动输入https,而且大家习惯输入www.网址.com,会直接导致访问不到网站的.下面介绍直接修改tomcat配置,使得…

URL请求省略端口号和项目名访问Tomcat部署的项目

前言&#xff1a;很多时候Tomcat部署好Web项目之后访问项目的时候都需要加上端口号和项目名&#xff0c;如&#xff1a;http://localhost:8080/项目名&#xff0c;下面我会介绍可以不用输端口号和项目名便可以直接进行访问的方法&#xff0c;其实就是修改Tomcat下conf目录中的s…

让tomcat服务器使用url rewrite

第一步&#xff1a;首先到这里下载 http://tuckey.org/urlrewrite/ 稳定版&#xff1a;urlrewrite-2.6.0.jar 第二步&#xff1a;将urlrewrite-2.6.0.jar 放到tomcat的lib目录下。 第三步&#xff1a;将urlrewrite-2.6.0.jar 放到Netbeans的工程目录下的…

Tomcat之中文URL问题

背景 如果你需要访问带有中文路径的URL怎么办&#xff1f;比如说mp3、mp4文件。 比如这样的路径&#xff1a; http://127.0.0.1:8080/LZPlayer/mp3/1168/徐小凤 - 顺流逆流.mp3 那么&#xff0c;需要去修改Tomcat的配置文件&#xff0c;让他支持中文即可。 步骤 修改配置文…

URL访问地址和Tomcat项目部署中不得不说的小秘密

今天来简单讲讲tomcat项目部署和url地址访问栏的关系&#xff0c;顺便和大家分享下&#xff0c;叙述不当之处&#xff0c;还请大家多多指导&#xff01; 众所周知&#xff0c;Tomcat项目发布的默认访问地址格式如下&#xff1a;http://localhost:8080/MyDemo/index.jsp 由于we…