QTday5

2023-09-21 21:12:27

注册

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();
}

更多推荐

Android的View绑定实现----编译时注解实现findViewById和setOnClickListener方式

标题有点长,相信用过xUtils和ButterKnife框架的都知道啥意思,他们都可以通过注解的方式省去繁琐的findViewById和setOnClickListener代码的编写。他们2者的实现原理不一样,前者用的是运行时注解,后者用的是编译时注解,对于不同的注解,会有不同的注解处理器,针对运行时注解会采用反射机制

Java高级-反射

目录认识反射、获取类反射(Reflection)反射可进行的操作加载类,获取类的字节码:Class对象获取对象的三种方法获取构造器对象并使用获取构造器的方法获取构造器的作用获取成员变量和方法对象并使用获取类的成员变量的方法获取类的成员变量的作用获取成员方法的方法获取成员方法的作用认识反射、获取类反射(Reflectio

JVM--Java类加载器笔记

Java类加载器代码经过编译变成了字节码打包成Jar文件。让JVM去加载需要的字节码,变成持久代/元数据区上的Class对象,接着执行程序逻辑。类声明周期和加载过程步骤:加载->链接(校验->准备->解析)->初始化->使用->卸载加载:根据明确知道的class完全限定名,来获取二进制classfile格式的字节流(找

算法讨论题 —— Java实现两数之和

给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。即:每个index上的数字只能用一次。示例给定nums=[2,7,11,15],target=9因为nums[0]+nums[1]=2+7=9所以返回[0,1]解答这个题目的原题是在:力扣(Leet

Zookeeper分布式锁的概念及原理

文章目录1.Zookeeper分布式锁的概念2.分布式锁的实现方式3.Zookeeper分布式锁的原理1.Zookeeper分布式锁的概念分布式锁的概念图如下:一种演变过程。在我们进行单机应用程序开发时,往往会涉及到并发同步的问题,一般都会采用synchronized或者Lock锁的方式来解决多线程间的代码同步问题,这

EM3DANI包详解:使用Julia语言进行3D频域电磁数据建模的终极指南

第一部分:EM3DANI包的简介与安装1.EM3DANI包简介EM3DANI是一个强大的工具包,专门为那些希望使用Julia语言进行频域电磁(CSEM和MT)数据的3D建模的研究者和开发者设计。它支持各向同性和各向异性建模,使得用户可以更加灵活地进行电磁数据的模拟和分析。频域电磁(CSEM和MT)技术在地球物理勘探、矿

Leetcode.2826 将三个组排序

题目链接Leetcode.2826将三个组排序rating:1721题目描述给你一个下标从000开始长度为nnn的整数数组numsnumsnums。从000到n−1n-1n−1的数字被分为编号从111到333的三个组,数字iii属于组nums[i]nums[i]nums[i]。注意,有的组可能是空的。你可以执行以下操作

[C语言]栈与队列——喵喵队,冲冲冲

宝子,你不点个赞吗?不评个论吗?不收个藏吗?最后的最后,关注我,关注我,关注我,你会看到更多有趣的博客哦!!!喵喵喵,你对我真的很重要。目录前言栈栈的实现队列队列的实现总结前言实践,实践,实践,多练几遍力扣,牛客的题。落实到脚下。栈栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作

Ubuntu安装RabbitMQ server - 在外远程访问

文章目录前言1.安装erlang语言2.安装rabbitMQ3.内网穿透3.1安装cpolar内网穿透(支持一键自动安装脚本)3.2创建HTTP隧道4.公网远程连接5.固定公网TCP地址5.1保留一个固定的公网TCP端口地址5.2配置固定公网TCP端口地址前言RabbitMQ是一个在AMQP(高级消息队列协议)基础上完

单例模式的安全写法

要想知道怎么写单例模式,那么必须得知道什么是单例模式。单例模式是一种设计模式,它确保某个类只有一个实例,并且提供一个全局访问该实例的方法。单例模式不会创建实例副本,而是返回对已创建实例的引用。单例模式的创建可以分为两类。第一类是饿汉式单例模式,它在类加载时就创建了唯一的实例对象,并在全局范围内提供访问点。第二类是懒汉式

如何制作一个成功的超市购物小程序

随着互联网的普及和移动支付的便捷性,越来越多的消费者选择在网上购物,这也促使越来越多的商家开始搭建自己的小程序商城。对于超市便利店来说,拥有一个便捷、易用的小程序商城能够吸引更多的消费者,提高销售效率。那么如何快速搭建一个超市便利店小程序呢?下面我们将通过乔拓云平台来介绍这个过程。步骤1:登录乔拓云网后台,进入商城管理

热文推荐