2023年9月21日

news2024/11/26 0:36:00

完善登录界面的注册登录功能

头文件1

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QPushButton>
#include <QLineEdit>
#include <QLabel>
#include <QMovie>
#include <QDebug>
#include <QMessageBox>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlRecord>

QT_BEGIN_NAMESPACE
namespace Ui {class MainWindow;}
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
public slots:
    //void on_btn1_clicked();

    void my_slot1();
    void my_slot2();
    void my_slot3();

private:
    Ui::MainWindow *ui;
    QLineEdit *edti1;
    QLineEdit *edti2;
    QPushButton *btn1;
    QPushButton *btn2;
    QPushButton *btn3;
    QLabel *lab1;
    QLabel *lab2;
    QLabel *lab3;
    QSqlDatabase db;  //定义一个数据库的类对象

signals:
    //void btn1_signal();
    void jump();
    void jump2();
};
#endif // MAINWINDOW_H

.cpp1

#include "mainwindow.h"
#include <QDebug>
#include <iostream>
#include <QIcon>
#include <QMovie>


MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    //界面
    this->setFixedSize(800,600);  //设置固定尺寸
    this->setWindowTitle("摇篮游行");  //设置窗口标签
    this->setWindowIcon(QIcon(":/pict/123.webp")); //设置窗口图标

    //登录按钮
    btn1 = new QPushButton(QIcon(":/pict/213.jpg"),"登录",this);  //构造一个按钮
    btn1->resize(100,50);  //设置按钮大小
    btn1->move(550,420);   //移动按钮

    //退出按钮
    btn2 = new QPushButton(QIcon(":/pict/12345.jpg"),"退出",this); //构造一个按钮
    btn2->resize(btn1->size());
    btn2->move(550,520);

    //注册按钮
    btn3 = new QPushButton(QIcon(":/pict/1234567.jpg"),"注册",this);
    btn3->resize(btn1->size());
    btn3->move(680,420);

    //行编辑器
    edti1 = new QLineEdit(this);  //构造一个行编辑器
    edti1->setPlaceholderText("繁星凝望着海洋");
    edti1->resize(300,50);
    edti1->move(180,420);

    edti2 = new QLineEdit(this);  //构造一个行编辑器
    edti2->setPlaceholderText("海洋拥抱着风帆");
    edti2->resize(300,50);
    edti2->move(180,520);

    //按钮事件
    connect(btn1,SIGNAL(clicked()),this,SLOT(my_slot1()));
    connect(btn2,SIGNAL(clicked()),this,SLOT(my_slot2()));
    connect(btn3,SIGNAL(clicked()),this,SLOT(my_slot3()));

    //标签
    lab1 = new QLabel(this);
    lab1->resize(80,50);
    lab1->setPixmap(QPixmap(":/pict/321.webp"));
    lab1->setScaledContents(true);
    lab1->move(100,420);

    lab2 = new QLabel(this);
    lab2->resize(80,50);
    lab2->setPixmap(QPixmap(":/pict/4321.webp"));
    lab2->setScaledContents(true);
    lab2->move(100,520);

    //gif
    QMovie *movie = new QMovie(":/pict/6.gif");
    lab3 = new QLabel(this);
    lab3->resize(800,400);
    lab3->setMovie(movie);
    movie->start();
    lab3->setScaledContents(true);
    lab3->move(0,0);

    //如果没有则创建数据库
    if(!db.contains("lamia.db"))
    {
        //添加一个数据库
        db = QSqlDatabase::addDatabase("QSQLITE");

        //设置名字
        db.setDatabaseName("lamia.db");
    }

    //打开数据库
    if(!db.open())
    {
        QMessageBox::information(this,"失败","数据库打开失败");
        return ;
    }
}

//登录按钮
void MainWindow::my_slot1()
{
    //sql语句
    QString sql = "select * from user";

    QSqlQuery querry;

    if(!querry.exec(sql))
    {
        QMessageBox::information(this,"提示","信息查询失败");
        return;
    }
    int flag=0;
    while(querry.next())
    {
        QString user = querry.record().value(0).toString();
        QString word = querry.record().value(1).toString();
        if(this->edti1->text()==user&&this->edti2->text()==word)
        {
            QMessageBox::information(this,"登录成功","登录成功!");
            emit jump();
            flag=1;
            this->close();
        }
    }
    if(flag==0)
    {
    QMessageBox::critical(
                this,tr("摇篮游行"),
                tr("账号或密码不正确,是否重新登录"),
                QMessageBox::Yes | QMessageBox::Cancel,
                QMessageBox::Cancel
                );
    }

}

//退出按钮
void MainWindow::my_slot2()
{
    int ret = QMessageBox::question(
                this,tr("摇篮游行"),
                tr("是否退出"),
                QMessageBox::Yes | QMessageBox::No,
                QMessageBox::No);
    if(ret==QMessageBox::Yes)
    {
        this->close();
    }


}

//注册按钮
void MainWindow::my_slot3()
{
    emit jump2();
}

MainWindow::~MainWindow()
{

}

头文件2

#ifndef SECOND_H
#define SECOND_H

#include <QWidget>
#include <QMainWindow>
#include <QPushButton>
#include <QLineEdit>
#include <QLabel>
#include <QMovie>
#include <QDebug>
#include <QMessageBox>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlRecord>

namespace Ui {
class second;
}

class second : public QWidget
{
    Q_OBJECT

public slots:
    void jump_slot();

public:
    explicit second(QWidget *parent = nullptr);
    ~second();

private:
    Ui::second *ui;
    QLabel *lab1;
};

#endif // SECOND_H

.cpp2

#include "second.h"
#include "ui_second.h"

second::second(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::second)
{
    ui->setupUi(this);
    this->setFixedSize(800,600);  //设置固定尺寸
    this->setWindowTitle("摇篮游行");  //设置窗口标签
    this->setWindowIcon(QIcon(":/pict/123.webp")); //设置窗口图标

    lab1 = new QLabel(this);
    lab1->resize(800,600);
    lab1->setText("施工中");
    lab1->setAlignment(Qt::AlignCenter);
    lab1->move(0,0);
}

second::~second()
{
    delete ui;
}

void second::jump_slot()
{
    this->show();
}

头文件3

#ifndef THIRD_H
#define THIRD_H

#include <QMainWindow>
#include <QPushButton>
#include <QLineEdit>
#include <QLabel>
#include <QMovie>
#include <QDebug>
#include <QMessageBox>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlRecord>

namespace Ui {
class third;
}

class third : public QWidget
{
    Q_OBJECT

public:
    explicit third(QWidget *parent = nullptr);
    QLineEdit *edti1;
    QLineEdit *edti2;
    ~third();

public slots:
    void jump_slot();
    void my_slot1();
    void my_slot2();

private:
    //定义ui界面
    Ui::third *ui;
    QPushButton *btn2;
    QPushButton *btn3;
    QLabel *lab1;
    QSqlDatabase db;  //定义一个数据库的类对象
};

#endif // THIRD_H

.cpp3

#include "third.h"
#include "ui_third.h"

third::third(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::third)
{
    ui->setupUi(this);
    //界面
    this->setFixedSize(450,400);  //设置固定尺寸
    this->setWindowTitle("账号注册");  //设置窗口标签
    this->setWindowIcon(QIcon(":/pict/1234567.jpg")); //设置窗口图标

    //注册按钮
    btn3 = new QPushButton(QIcon(":/pict/4321.png"),"注册",this);
    btn3->resize(100,50);
    btn3->move(300,270);

    //退出按钮
    btn2 = new QPushButton(QIcon(":/pict/123123.png"),"退出",this);
    btn2->resize(100,50);
    btn2->move(300,340);

    //标签
    lab1 = new QLabel(this);
    lab1->resize(500,250);
    lab1->setPixmap(QPixmap(":/pict/54321.jpg"));
    lab1->setScaledContents(false);
    lab1->move(0,0);

    //账号密码栏
    edti1 = new QLineEdit(this);  //构造一个行编辑器
    edti1->setPlaceholderText("注册账号");
    edti1->resize(200,50);
    edti1->move(20,270);

    edti2 = new QLineEdit(this);  //构造一个行编辑器
    edti2->setPlaceholderText("注册密码");
    edti2->resize(200,50);
    edti2->move(20,340);

    connect(btn3,SIGNAL(clicked()),this,SLOT(my_slot1()));
    connect(btn2,SIGNAL(clicked()),this,SLOT(my_slot2()));

    //如果没有则创建数据库
    if(!db.contains("lamia.db"))
    {
        //添加一个数据库
        db = QSqlDatabase::addDatabase("QSQLITE");

        //设置名字
        db.setDatabaseName("lamia.db");
    }

    //打开数据库
    if(!db.open())
    {
        QMessageBox::information(this,"失败","数据库打开失败");
        return ;
    }

    //创建表
    QString sql = "create table if not exists user("
                  "username varchar(20),"
                  "password varchar(20))";

    QSqlQuery querry;
    if(!querry.exec(sql))
    {
        QMessageBox::information(this,"失败","创建表失败");
        return ;
    }

}

third::~third()
{
    delete ui;
}

void third::jump_slot()
{
    this->show();
}

void third::my_slot2()
{
    int ret = QMessageBox::question(
                this,tr("退出提示"),
                tr("是否退出"),
                QMessageBox::Yes | QMessageBox::No,
                QMessageBox::No);
    if(ret==QMessageBox::Yes)
    {
        this->close();
    }
}

void third::my_slot1()
{
    //获取输入栏中的内容
    QString user = this->edti1->text();
    QString password = this->edti2->text();

    //确保账号密码都被输入
    if(user.isEmpty()||password.isEmpty())
    {
        QMessageBox::information(this,"提示","请将信息填写完整");
        return ;
    }

    //遍历查看账号是否以注册
    //sql语句
    QString sql = "select * from user";

    QSqlQuery querry;

    if(!querry.exec(sql))
    {
        QMessageBox::information(this,"提示","账号查询失败");
        return;
    }

    int flag=0;
    QString olduser="";
    while(querry.next())
    {
         olduser = querry.record().value(0).toString();
        if(olduser==user)
        {
            QMessageBox::warning(this,"错误","改账号已注册请重新输入");
            this->edti1->clear();
            this->edti2->clear();
            flag=1;
        }
    }

    //sql语句录入信息
    if(flag==0)
    {
        sql = QString("insert into user(username,password)"
                               "values('%1','%2')").arg(user).arg(password);

        QSqlQuery querry;
        if(!querry.exec(sql))
        {
            QMessageBox::information(this,"失败","注册失败");
            return;
        }else
        {
            QMessageBox::information(this,"成功","注册成功");
            this->edti1->clear();
            this->edti2->clear();
        }
        this->close();
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1029339.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【计算机网络】深入理解TCP协议二(连接管理机制、WAIT_TIME、滑动窗口、流量控制、拥塞控制)

TCP协议 1.连接管理机制2.再谈WAIT_TIME状态2.1理解WAIT_TIME状态2.2解决TIME_WAIT状态引起的bind失败的方法2.3监听套接字listen第二个参数介绍 3.滑动窗口3.1介绍3.2丢包情况分析 4.流量控制5.拥塞控制5.1介绍5.2慢启动 6.捎带应答、延时应答 1.连接管理机制 正常情况下&…

记一次 .NET 某餐饮小程序 内存暴涨分析

一&#xff1a;背景 1. 讲故事 前些天有位朋友找到我&#xff0c;说他的程序内存异常高&#xff0c;用 vs诊断工具 加载时间又太久&#xff0c;让我帮忙看一下到底咋回事&#xff0c;截图如下&#xff1a; 确实&#xff0c;如果dump文件超过 10G 之后&#xff0c;市面上那些可…

ESP8266 WiFi物联网智能插座—项目简介

目录 1、项目背景 2、设备节点功能 3、上位机功能 物联网虽然能够使家居设备和系统实现自动化、智能化管理&#xff0c;但是依然需要依靠更为先进的终端插座作为根本保障&#xff0c;插座是所有家用电器需要使用的电源设备&#xff0c;插座的有序智能管理&#xff0c;对于实…

SpringMVC初级

文章目录 一、SpringMVC 概述二、springMVC步骤1、新建maven的web项目2、导入maven依赖3、创建controller4、创建spring-mvc.xml配置文件&#xff08;本质就是spring的配置件&#xff09;5、web.xml中配置前端控制器6、新建a.jsp文件7、配置tomcat8、启动测试 三、工作流程分析…

echart在折线显示横纵(横纵线沿着折线展示)

产品有个需求&#xff0c;需要在echart折线上展示横纵向坐标系&#xff0c;echart的axisPointer默认是展示在鼠标当前位置的&#xff0c;不符合需求&#xff0c;所以是使用markline实现的 在线例子和源码 先上效果图 实现思路 横纵线的x轴线是比较容易的&#xff0c;因为ech…

ONES 全球化启航,用软件服务全球企业

美西太平洋时间2023年9月6日至9月8日&#xff0c;SaaStr Annual 2023 大会在美国旧金山举办。作为全球最大规模、最具影响力的 SaaS 行业盛会&#xff0c;SaaStr 吸引了上万名来自世界各地的 SaaS 行业从业者&#xff0c;ONES 也作为展商之一参与其中。 在为期三天的大会期间&a…

实用的嵌入式编码技巧:第三部分

每个触发器都有两个我们在风险方面违反的关键规格。“建立时间”是时钟到来之前输入数据必须稳定的最小纳秒数。“保持时间”告诉我们在时钟转换后保持数据存在多长时间。 这些规格因逻辑设备而异。有些可能需要数十纳秒的设置和/或保持时间&#xff1b;其他人则需要少一个数量…

DC/DC开关电源学习笔记(十)Buck降压电路仿真及工程应用实例

(十)Buck降压电路仿真及工程应用实例 1. 仿真应用实例1.1 案例一1.2 案例二2. 工程应用实例2.1 数字DC/DC应用实例2.2 模拟DC/DC应用实例1. 仿真应用实例 1.1 案例一 仿真技术要求输入:输入电压30~90V,输出电压28V,输出电流最大10A,开关频率100KHz。我们按照参数极限工…

大语言模型之十一 Transformer后继者Retentive Networks (RetNet)

在《大语言模型之四-LlaMA-2从模型到应用》的LLama-2推理图中可以看到&#xff0c;在输入“你好&#xff01;”时&#xff0c;是串行进行的&#xff0c;即先输入“你”这个token&#xff0c;然后是“好”&#xff0c;再然后是“&#xff01;”token&#xff0c;前一个token需要…

【QT】day5

1.登录注册和数据库联动 三个头文件 #ifndef DEMO_H #define DEMO_H#include <QWidget> #include <QSqlDatabase> //数据库管理类 #include <QSqlQuery> //执行sql语句的类 #include <QSqlRecord> //数据库记录的类 #include <QMessageBox>…

传统的经典问题 Java 的 Interface 是干什么的

传统的经典问题 Java 的 Interface 是干什么 解答 上面的这个问题应该还是比较好回答的吧。 只要你做过 Java &#xff0c;通常 Interface 的问题多多少少会遇到&#xff0c;而且可能会遇到一大堆。 在JAVA编程语言中是一个抽象类型&#xff08;Abstract Type&#xff09;&…

SpringBoot之静态资源规则与定制化

文章目录 前言一、静态资源访问二、静态资源访问前缀三、webjar资源处理的默认规则 四、welcome与favicon功能1.欢迎页支持欢迎页处理规则 2.自定义Favicon 五、补充总结 前言 本文主要介绍关于SpringBoot中Web开发的简单功能。 一、静态资源访问 只要静态资源放在类路径下&am…

物联网安全优秀实践:2023年设备保护指南

物联网的发展可谓是革命性的&#xff0c;数十亿台设备实时互连、通信和共享数据。因此&#xff0c;考虑物联网安全的最佳实践至关重要。 物联网的重要性日益上升 在数字时代&#xff0c;物联网(IoT)已成为一股革命力量&#xff0c;重塑了企业运营和个人生活方式。从调节家庭温…

基于win32实现TB登陆滑动验证

这里写目录标题 滑动验证触发条件&#xff1a;失败条件&#xff1a;解决方法:清除cooKie 滑动验证方式一&#xff1a;win32 api获取窗口句柄&#xff0c;选择固定位置 成功率高方式二&#xff1a; 原自动化滑动&#xff0c;成功率中 案例 先谈理论&#xff0c;淘宝 taobao.com …

A Span-based Multi-Modal Attention Network for joint entity-relationextraction

原文链接&#xff1a; https://www.sciencedirect.com/science/article/pii/S0950705122013247?via%3Dihub Knowledge-Based Systems 2023 介绍 作者认为当前基于span的关系提取方法都太关注于span内部的语义&#xff0c;忽略了span与span之间以及span与其他模态之间&#xff…

腾讯云服务器16核 32G 28M带宽租用价格、性能测评及配置大全

腾讯云轻量应用服务器16核32G28M配置优惠价3468元15个月&#xff08;支持免费续3个月/送同配置3个月&#xff09;&#xff0c;轻量应用服务器具有100%CPU性能&#xff0c;系统盘为380GB SSD盘&#xff0c;28M带宽下载速度3584KB/秒&#xff0c;月流量6000GB&#xff0c;折合每天…

C语言入门Day_23 指针的使用

目录 前言&#xff1a; 1.指针运算符 2.指针的运算和使用 3.易错点 4.思维导图 前言&#xff1a; 上一篇博客中我们了解到指针的两个运算符号"&#xff1a; 一个是星号*&#xff0c;一个是&&#xff0c;他们的名字分别是指针运算符和取地址运算符。 1.指针运算…

【JAVA】关于抽象类的概念

个人主页&#xff1a;【&#x1f60a;个人主页】 系列专栏&#xff1a;【❤️初识JAVA】 前言 在Java中&#xff0c;抽象类是一种特殊的类&#xff0c;它无法被实例化。它只能被用作其他类的基类&#xff0c;以便子类可以继承它的属性和方法。今天我们就来谈谈JAVA中的抽象类。…

爬虫 — App 爬虫(一)

目录 一、介绍二、APP 爬虫常见反爬三、APP 抓包常用工具四、模拟器五、安装 APP1、下载 APP2、安装 APP 六、fiddler1、工作原理2、安装3、基本介绍 七、环境配置1、fiddler 的配置2、夜神模拟器的配置 八、案例 一、介绍 爬虫分类——数据来源 1、PC 端爬虫&#xff08;网页…

IP风险查询:抵御DDoS攻击和CC攻击的关键一步

随着互联网的普及&#xff0c;网络攻击变得越来越普遍和复杂&#xff0c;对企业和个人的网络安全构成了重大威胁。其中&#xff0c;DDoS&#xff08;分布式拒绝服务&#xff09;攻击和CC&#xff08;网络连接&#xff09;攻击是两种常见且具有破坏性的攻击类型&#xff0c;它们…