QT&C++ day12

2023-09-21 21:10:11

注册登录界面

widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QIcon>
#include <QPushButton>
#include <QLineEdit>
#include <QLabel>
#include <QDebug>
#include <QMessageBox>//消息对话框类
#include "second.h"
#include <QSqlDatabase>//数据库管理类
#include <QSqlQuery>//执行sql语句类
#include <QSqlRecord>//数据库记录的类
#include "zhuce.h" //注册头文件
QT_BEGIN_NAMESPACE
namespace Ui { class widget; }
QT_END_NAMESPACE

class widget : public QWidget
{
    Q_OBJECT
signals://该权限下定义属于自己的信号
    void my_signal(QString msg);//自定义一个有参无返回值的信号函数
private:
    void on_btn1_clicked();//自定义的槽函数声明
    void on_btn2_clicked();//自定义的槽函数声明
    void on_btn3_clicked();
public:
    widget(QWidget *parent = nullptr);
    ~widget();
signals:
    void jump();//自定义跳转信号函数
    void jump1();
public:
     //void jump_slot2();

private:
    Ui::widget *ui;
    //自定义一个btn1
    QPushButton *btn1;
    QPushButton *btn2;
    QPushButton *btn3;
    QLineEdit *edit2;
    QLineEdit *edit1;
    Second *s1;
    QSqlDatabase db; //定义一个数据库的类对象
    zhuce *s2;
};
#endif // WIDGET_H

zhuce.h

#ifndef ZHUCE_H
#define ZHUCE_H

#include <QWidget>
#include <QLineEdit>
#include <QLabel>
#include <QIcon>
#include <QPushButton>
#include <QMessageBox>
#include <QSqlDatabase>
#include <QSqlQuery>//执行sql语句类
#include <QSqlRecord>//数据库记录的类
//#include "widget.h"
namespace Ui {
class zhuce;
}

class zhuce : public QWidget
{
    Q_OBJECT
private:
    void on_btn2_clicked();//自定义的槽函数声明
    void on_btn3_clicked();
public:
     void jump_slot1();
signals:
     //void jump2();

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

private:
    Ui::zhuce *ui;
    QLineEdit *edit2;//密码
    QLineEdit *edit1;//用户名
    QLineEdit *edit3;//确认密码
    QPushButton *btn2;
    QPushButton *btn3;
    QSqlDatabase db; //定义一个数据库的类对象
    //widget *s3;
};

#endif // ZHUCE_H

widget.cpp

#include "widget.h"


widget::widget(QWidget *parent)
    : QWidget(parent)
{
    //登录成功的界面
    s1=new Second;
    connect(this,&widget::jump,s1,&Second::jump_slot);

    //注册的界面
    s2=new zhuce;
    connect(this,&widget::jump1,s2,&zhuce::jump_slot1);

    //添加数据库
    if(!db.contains("mysql.db"))
    {
        //添加数据库
        db=QSqlDatabase::addDatabase("QSQLITE");
        //设置数据库名字
        db.setDatabaseName("mysql.db");
    }

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

    //准备sql语句对表进行创建
    QString sql="create table if not exists stu_info("
                "name varchar(10) primary key,"//用户名
                "password varchar(20))";//密码
    //语句执行者
    QSqlQuery querry;
    if(!querry.exec(sql))
    {
        QMessageBox::information(this,"失败","数据库创建失败");
        return;
    }

    this->setFixedSize(550,400);//设置固定尺寸
    this->setWindowTitle("Widget");//设置窗口标题
    this->setWindowIcon(QIcon("D:\\icon\\wodepeizhenshi.png"));//设置窗口图标

    //实例化一个标签
    QLabel *lab1 = new QLabel;
    lab1->setParent(this);
    lab1->resize(550,215);//重新设置尺寸
    //lab1->setAlignment(Qt::AlignCenter);//文本对齐
    lab1->setPixmap(QPixmap("D:\\icon\\logo.png"));
    lab1->setScaledContents(true);//设置内容自适应

    QLabel *lab3 = new QLabel;
    lab3->setParent(this);//指定父组件
    lab3->resize(40,40);//重新设置尺寸
    lab3->move(100,220);
    //lab3->setAlignment(Qt::AlignCenter);
    lab3->setPixmap(QPixmap("D:\\icon\\userName.jpg"));
    lab3->setScaledContents(true);//设置内容自适应

    QLabel *lab2 = new QLabel;
    lab2->setParent(this);
    lab2->resize(40,40);//重新设置尺寸
    lab2->move(100,270);

    lab2->setPixmap(QPixmap("D:\\icon\\passwd.jpg"));
    lab2->setScaledContents(true);//设置内容自适应

    // 实例化一个行编辑器
    edit1 = new QLineEdit(this);
    edit1->resize(250,40);
    edit1->move(lab3->x()+50,lab3->y());
    // 实例化一个行编辑器
    edit2 = new QLineEdit(this);
    edit2->resize(250,40);
    edit2->move(lab2->x()+50,lab2->y());
    edit2->setEchoMode(QLineEdit::Password);//设置回显模式

    //实例化一个按钮并给定图标,文本内容,父组件
    btn1 = new QPushButton(QIcon("D:\\icon\\login.png"), "登录", this);
    btn1->resize(100,50);//设置按钮大小
    btn1->move(225,325);//设置按钮移动位置
    connect(this->btn1,&QPushButton::clicked,this,&widget::on_btn1_clicked);

    btn3 = new QPushButton(QIcon("D:\\icon\\R-C.jpg"), "注册", this);
    btn3->resize(btn1->size());//设置按钮大小
    btn3->move(btn1->x()-150,btn1->y());//设置按钮移动位置
    connect(this->btn3,&QPushButton::clicked,this,&widget::on_btn3_clicked);

    btn2 = new QPushButton(QIcon("D:\\icon\\cancel.png"),"取消", this);
    btn2->resize(btn1->size());
    btn2->move(btn1->x()+150,btn1->y());
    connect(this->btn2,&QPushButton::clicked,this,&widget::on_btn2_clicked);
}
//登录按钮
void widget::on_btn1_clicked()
{
    //获取界面姓名
       QString name = this->edit1->text();
       //准备sql语句
       QString sql = QString("select * from stu_info where name='%1'").arg(name);
       //准备执行者
       QSqlQuery querry;

       if(!querry.exec(sql))
       {
           QMessageBox::information(this, "提示", "登录失败");
           return;
       }
    else
    {
        //1、调用构造函数实例化对象
        QMessageBox box(QMessageBox::Information,//图标
                        "信息对话框",//对话框标题
                        "登录成功",//对话框文本内容
                        QMessageBox::Ok,//提供的按钮
                        this);//父组件
        box.setDefaultButton(QMessageBox::Ok);//将OK设置为默认按钮
        //2、调用exec函数运行对话框
        int ret=box.exec();
        //3、对结果进行判断
        if(ret==QMessageBox::Ok)
        {
            emit jump();
            this->hide();
        }
    }
}
//取消按钮
void widget::on_btn2_clicked()
{
    //1、调用构造函数实例化对象
    QMessageBox box(QMessageBox::Question,//图标
                    "问题对话框",//对话框标题
                    "是否确定取消登录?",//对话框文本内容
                    QMessageBox::Yes|QMessageBox::No,//提供的按钮
                    this);//父组件
    box.setDefaultButton(QMessageBox::No);//将no设置为默认按钮
    //2、调用exec函数运行对话框
    int ret=box.exec();
    //3、对结果进行判断
    if(ret==QMessageBox::Yes)
    {
        close();
    }
    else if(ret==QMessageBox::No)
    {
    }
}
void widget::on_btn3_clicked()
{
    emit jump1();
    //QWidget::hide();
}
widget::~widget()
{
}

/*void widget::jump_slot2()
{
    this->show();
}*/

zhuce.cpp

#include "zhuce.h"
#include "ui_zhuce.h"


zhuce::zhuce(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::zhuce)
{
    //注册的界面
    //s3=new widget;
    //connect(this,&zhuce::jump2,s3,&widget::jump_slot2);

    this->setFixedSize(550,500);//设置固定尺寸
    this->setWindowTitle("注册");//设置窗口标题
    this->setWindowIcon(QIcon("D:\\icon\\wodepeizhenshi.png"));//设置窗口图标

    //实例化一个标签
    QLabel *lab = new QLabel;
    lab->setParent(this);
    lab->resize(550,215);//重新设置尺寸
    //lab1->setAlignment(Qt::AlignCenter);//文本对齐
    lab->setPixmap(QPixmap("D:\\icon\\logo.png"));
    lab->setScaledContents(true);//设置内容自适应

    ui->setupUi(this);
    QLabel *lab1 = new QLabel;
    lab1->setParent(this);//指定父组件
    lab1->resize(150,40);//重新设置尺寸
    lab1->move(100,220);
    //lab3->setAlignment(Qt::AlignCenter);
    lab1->setText("用户名:");
    lab1->setScaledContents(true);//设置内容自适应

    QLabel *lab2 = new QLabel;
    lab2->setParent(this);
    lab2->resize(150,40);//重新设置尺寸
    lab2->move(100,270);

    lab2->setText("密码:");
    lab2->setScaledContents(true);//设置内容自适应

    QLabel *lab3 = new QLabel;
    lab3->setParent(this);
    lab3->resize(150,40);//重新设置尺寸
    lab3->move(100,320);
    lab3->setText("确认密码:");
    lab3->setScaledContents(true);//设置内容自适应

    // 实例化一个行编辑器
    edit1 = new QLineEdit(this);
    edit1->resize(250,40);
    edit1->move(lab1->x()+80,lab1->y());
    // 实例化一个行编辑器
    edit2 = new QLineEdit(this);
    edit2->resize(250,40);
    edit2->move(lab2->x()+80,lab2->y());
    edit2->setEchoMode(QLineEdit::Password);//设置回显模式

    edit3 = new QLineEdit(this);
    edit3->resize(250,40);
    edit3->move(lab3->x()+80,lab3->y());
    edit3->setEchoMode(QLineEdit::Password);//设置回显模式

    btn3 = new QPushButton(QIcon("D:\\icon\\R-C.jpg"), "注册", this);
    btn3->resize(100,50);//设置按钮大小
    btn3->move(125,400);//设置按钮移动位置
    connect(this->btn3,&QPushButton::clicked,this,&zhuce::on_btn3_clicked);

    btn2 = new QPushButton(QIcon("D:\\icon\\cancel.png"),"取消", this);
    btn2->resize(100,50);
    btn2->move(325,400);
    connect(this->btn2,&QPushButton::clicked,this,&zhuce::on_btn2_clicked);

    //添加数据库
        if(!db.contains("mysql.db"))
        {
            //添加数据库
            db=QSqlDatabase::addDatabase("QSQLITE");
            //设置数据库名字
            db.setDatabaseName("mysql.db");
        }

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

zhuce::~zhuce()
{
    delete ui;
}
//取消
void zhuce::on_btn2_clicked()
{
    //1、调用构造函数实例化对象
    QMessageBox box(QMessageBox::Question,//图标
                    "问题对话框",//对话框标题
                    "是否确定取消注册?",//对话框文本内容
                    QMessageBox::Yes|QMessageBox::No,//提供的按钮
                    this);//父组件
    box.setDefaultButton(QMessageBox::No);//将no设置为默认按钮
    //2、调用exec函数运行对话框
    int ret=box.exec();
    //3、对结果进行判断
    if(ret==QMessageBox::Yes)
    {
        close();
    }
    else if(ret==QMessageBox::No)
    {
    }
}
void zhuce::on_btn3_clicked()
{
    //记录要录入的数据
    QString name=this->edit1->text();
    QString password=this->edit3->text();
    if(this->edit2->text()!=this->edit3->text()&&this->edit2->text()!=0&&this->edit3->text()!=0)
    {
        QMessageBox::information(this,"失败","请输入相同的密码");
        return;
    }
    //准备sql语句
    QString sql=QString("insert into stu_info(name,password)"
                        "values('%1','%2')").arg(name).arg(password);
    //准备执行语句者
    QSqlQuery querry;
    if(!querry.exec(sql))
    {
        QMessageBox::information(this,"失败","注册失败");
        return;
    }
    else
    {
         QMessageBox::information(this,"成功","注册成功");
         //emit jump2();
         this->edit1->clear();
         this->edit2->clear();
         this->edit3->clear();
         this->close();
         //parentWidget()->show();
    }
}
void zhuce::jump_slot1()
{
    this->show();
}

思维导图:

更多推荐

代码随想录算法训练营第23期day2 | 977.有序数组的平方 、209.长度最小的子数组、59.螺旋矩阵II

目录一、(leetcode977)有序数组的平方1.暴力解法2.双指针法二、(leetcode209)长度最小的子数组1.暴力解法​编辑2.滑动窗口三、(leetcode59)螺旋矩阵II一、(leetcode977)有序数组的平方力扣题目链接1.暴力解法状态:已ACclassSolution{public:vecto

系统稳定性保障设计总结和思考

一、架构层面不同的系统在不同的业务发展阶段,对系统会有不同的考察指标,进行架构设计和技术选型更多是一种权衡和折中的选择,如何进行存储方案选型?是选择Mysql这类OLTP数据库还是MPP型OLAP数据仓库。如何进行消息队列选型?是选择可靠性更强的RabbitMQ还是还是轻松吞吐百万流量的Kafka,这些都是需要根据具体

docker 数据持久化

文章目录定制镜像持久化需求实现数据卷持久化数据卷简介数据卷的特性创建读写数据卷停止容器后的操作查看数据卷详情创建只写数据卷查看数据卷详情创建共享数据卷Dockerfile持久化创建Dockerfile、构建和运行镜像查看宿主机端的目录在容器层的UnionFS(联合文件系统)中对文件/目录的任何修改,无论是手工修改还是容

【CCF】第30次csp认证——202305-1重复局面

202305-1重复局面:问题描述国际象棋每一个局面可以用大小为8×8的字符数组来表示,其中每一位对应棋盘上的一个格子。六种棋子王、后、车、象、马、兵分别用字母k、q、r、b、n、p表示,其中大写字母对应白方、小写字母对应黑方。棋盘上无棋子处用字符*表示。两个字符数组的每一位均相同则说明对应同一局面。现已按上述方式整理

Vue构建SPA项目实现路由

目录前言一、VueCLI简介1.什么是VueCLI2.VueCLI的特点二、SPA项目搭建1.安装VueCLI2.使用脚手架vue-cli来构建项目​编辑3.项目结构说明4.什么是*.vue文件三、基于SPA完成路由并嵌套路由1.基于SPA完成路由1.1在src下的components创建自定义组件。1.2.定义路由与

java版Spring Cloud+Mybatis+Oauth2+分布式+微服务+实现工程管理系统

鸿鹄工程项目管理系统SpringCloud+SpringBoot+Mybatis+Vue+ElementUI+前后端分离构建工程项目管理系统1.项目背景一、随着公司的快速发展,企业人员和经营规模不断壮大。为了提高工程管理效率、减轻劳动强度、提高信息处理速度和准确性,公司对内部工程管理的提升提出了更高的要求。二、企业通过

TikTok的全球影响:跨文化、跨国界的短视频文化

随着TikTok的崛起,短视频文化正在以前所未有的方式迅速传播,跨足了不同国家和文化的边界。本文将探讨TikTok的全球影响,以及它如何促进了跨文化交流和文化融合。短视频:跨越语言和文化的沟通工具TikTok的短视频格式具有独特的跨文化传播能力。它通过简洁而生动的方式,允许用户在不同语言背景下进行沟通。这种简单而直接的

LeetCode 盛最多水的容器 双指针

原题链接:力扣(LeetCode)官网-全球极客挚爱的技术成长平台题面:给定一个长度为n的整数数组height。有n条垂线,第i条线的两个端点是(i,0)和(i,height[i])。找出其中的两条线,使得它们与x轴共同构成的容器可以容纳最多的水。返回容器可以储存的最大水量。说明:你不能倾斜容器。示例1:输入:[1,8

uniapp——ios证书申请——详细步骤+遇到的坑——技能提升

三年前,我曾经写过uniapp的程序,时隔三年,又遇到了uniapp的需求,之前没有自行申请ios证书,现在终于要自己生成证书了。。。是福不是祸,是祸躲不过。uniapp生成ios证书的详细步骤uniapp对接unipush的操作步骤链接1.生成`ios`证书1.1准备环境——略过1.2登录IOSDevCenter——

01. pring Cloud微服务系列之 包版本号约定

SpringCloud微服务系列文章,点击上方合集↑1.Java8目前市场上最常用的是Java8,而Java17则代表着未来的发展趋势。虽然SpringBoot3已经发布,但它要求最低版本为Java17。然而,考虑到目前很多开发工具库还没有完全适配Java17,因此在生产环境中使用可能会遇到一些问题和不兼容的情况。所以

U盘有病毒插上电脑会感染吗?了解下U盘的病毒传播机制

U盘作为一种常见的移动存储设备,我们会经常使用它来传输和存储重要的文件。然而,有时可能会遇到文件被当作病毒误删除的情况,这给我们带来了不便和焦虑。好在,这里将向您介绍一些简单而有效的方法,帮助您恢复被误删除的U盘文件,并探讨U盘的病毒传播机制,解答“U盘有病毒插上电脑会感染吗”的疑惑。▌案例分享“我安装了多个防病毒软件

热文推荐