QTC++ day12

news2024/11/25 14:56:16

注册登录界面

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

思维导图:

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

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

相关文章

tracert 路由追踪原理

一、概念 就是利用ICMP(Internet Control Message Protocol)Internet控制报文协议 来追踪的计算机到目标计算机之间的所有路由器信息 二、不同平台下命令方式 windows下&#xff1a; tracert www.baidu.comlinux下 traceroute www.baidu.com 三、基于方式 UDP(user datagram pr…

【建议收藏】5个神级AI提示词网站,让AI工具效率拉满

HI&#xff0c;同学们&#xff0c;我是赤辰&#xff0c;本期是赤辰第9篇AI工具类教程&#xff0c;文章底部准备了粉丝福利&#xff0c;看完可以领取&#xff01; 今天给大家推荐五款非常好玩的AI提示词资源网站&#xff0c;完全免费&#xff0c;无需魔法&#xff0c;直接复制粘…

DIY 一个汽车方向盘游戏外设(MMOS OSW DIY)

OSW-MMOS直驱方向盘DIY过程记录 - 简书 (jianshu.com) DIY 一个汽车方向盘游戏外设&#xff08;MMOS OSW DIY&#xff09; 首先讲一下这个直驱系统大概的框架&#xff0c;首先是电脑&#xff0c;电脑里装MMOS的软件(这个软件国内高手把它汉化了的)&#xff0c;电脑通过USB线&a…

行业首款数字牙刷 F10 系列:笑容加带来的智能刷牙革命

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

为什么tomcat要自定义线程池实现?

背景 最近在研究tomcat调优的问题&#xff0c;开发人员做过的最多的tomcat调优想必就是线程池调优了&#xff0c;但是tomcat并没有使用jdk自己的线程池实现&#xff0c;而是自定了了线程池&#xff0c;自己实现了ThreadPoolExecutor类位于org.apache.tomcat.util.threads包下 …

数据湖存储在大模型中的应用

9月5日&#xff0c;浪潮信息新产品“互联网AIGC”行业巡展在深圳举行。本次巡展以“智算 开新局创新机”为主题&#xff0c;腾讯云存储受邀分享数据湖存储在大模型中的应用&#xff0c;并在展区对腾讯云存储解决方案进行了全面的展示&#xff0c;引来众多参会者围观。 ChatGPT…

A股20年数据回测结果mysql数据查询 phpadmin

编辑 数据库登录使用 1.登录mysql数据库管理台 phpadmin 访问地址&#xff1a; http://121.43.55.160:888/phpmyadmin_c77c64465f15a891/index.php 用户名&#xff1a;root 密码&#xff1a; root 2.切换到阿里云服务器 3 数据库密码 用户名&#xff1a;readonly 密码&am…

堆的OJ题

&#x1f525;&#x1f525; 欢迎来到小林的博客&#xff01;&#xff01;       &#x1f6f0;️博客主页&#xff1a;✈️林 子       &#x1f6f0;️博客专栏&#xff1a;✈️ 小林的算法笔记       &#x1f6f0;️社区 :✈️ 进步学堂       &am…

【数据结构】二叉树的·深度优先遍历(前中后序遍历)and·广度优先(层序遍历)

&#x1f490; &#x1f338; &#x1f337; &#x1f340; &#x1f339; &#x1f33b; &#x1f33a; &#x1f341; &#x1f343; &#x1f342; &#x1f33f; &#x1f344;&#x1f35d; &#x1f35b; &#x1f364; &#x1f4c3;个人主页 &#xff1a;阿然成长日记 …

2023最新Nmap安装和使用详解,超详细教程

【点击文章末尾卡片&#xff0c;先领资料再阅读哦~】&#x1f447; 文章目录 【点击文章末尾卡片&#xff0c;先领资料再阅读哦~】&#x1f447; Nmap概述功能概述运行方式 Nmap安装Nmap参数详解目标说明主机发现端口扫描端口说明和扫描顺序服务与版本探测脚本扫描操作系统探测…

C++输入流和输出流介绍

C 又可以称为“带类的 C”&#xff0c;即可以理解为 C 是 C 语言的基础上增加了面向对象&#xff08;类和对象&#xff09;。在此基础上&#xff0c;学过 C 语言的读者应该知道&#xff0c;它有一整套完成数据读写&#xff08;I/O&#xff09;的解决方案&#xff1a; 使用 scan…

DAZ To UMA⭐二.设置DAZ导出的变形内容 和 获取模型纹理贴图位置

文章目录 🟩 设置DAZ导出的内容1️⃣ 找到要导出的参数名称2️⃣ 打开导出面板3️⃣ 设置导出规则举例 : 导出身体Assets🟦 获取模型纹理贴图🟩 设置DAZ导出的内容 设置参数有两个目的: DAZ可以进行模型的参数调整,例如胖瘦等等,那如何将这些调整后的数值一起导出到FBX中…

Window通过VMWare搭建Linux集群后,将虚拟机暴露到宿主机局域网中,实现个人服务器搭建

目录 一、目的二、实现的方法 2.1 保证VMnet8为NAT模式2.2 获取虚拟机IP后&#xff0c;与宿主机进行端口绑定2.3 查看宿主机端口配置是否生效2.4 宿主机的端口准入规则设置2.5 效果 一、目的 解决宿主机通过VMware WorkStation安装了虚拟机后&#xff0c;宿主机所在的局域网…

A股风格因子看板 (2023.09 第07期)

该因子看板跟踪A股风格因子&#xff0c;该因子主要解释沪深两市的市场收益、刻画市场风格趋势的系列风格因子&#xff0c;用以分析市场风格切换、组合风格景露等。 今日为该因子跟踪第7期&#xff0c;指数组合数据截止日2023-08-31&#xff0c;要点如下 近1年A股风格因子收益走…

开源日报 0821:帮你修复老旧照片

这篇文章总结了几个开源项目的特点和优势。其中包括了 Python 资源列表、金融研究工具、动画精灵程序、游戏和旧照片修复项目等。这些项目提供了丰富的功能和技术支持&#xff0c;用户可以根据自己的需求进行定制和改进。总的来说&#xff0c;这些开源项目为开发者和用户提供了…

在如今内卷严重的背景下,程序员该如何提高自己的收入,享受美好人生?

无论是当今程序员行业&#xff0c;还是各行各业&#xff0c;内卷都非常严重&#xff0c;好多人都处于了一种卷又卷不过&#xff0c;躺又躺不平的境地&#xff0c;十分的难受&#xff0c;那么作为一个程序员而言&#xff0c;该如何在这样的境地下提高自己的收入&#xff0c;享受…

动力节点老杜JavaWeb笔记(全)

Servlet 关于系统架构 系统架构包括什么形式&#xff1f; C/S架构B/S架构 C/S架构&#xff1f; Client / Server&#xff08;客户端 / 服务器&#xff09;C/S架构的软件或者说系统有哪些呢&#xff1f; QQ&#xff08;先去腾讯官网下载一个QQ软件&#xff0c;几十MB&#xff…

Innodb底层原理与Mysql日志机制

MySQL内部组件结构 Server层 主要包括连接器、词法分析器、优化器、执行器等&#xff0c;涵盖 MySQL 的大多数核心服务功能&#xff0c;以及所有的内置函数&#xff08;如日期、时间、数学和加密函数等&#xff09;&#xff0c;所有跨存储引擎的功能都在这一层实现&#xff0c…

1536. 排布二进制网格的最少交换次数;754. 到达终点数字;1106. 解析布尔表达式

1536. 排布二进制网格的最少交换次数 核心思想&#xff1a;贪心。枚举每一行&#xff0c;然后去找离这行最近的满足要求的那一行。我们用j保存每一行的最后一个1&#xff0c;那么尾部的0个数为n-1-j&#xff0c;每一行需要的0个数为n-i-1&#xff0c;所以得出结论 i > j。然…

asp.net网站的建立及运行

点击创建新项目 在输入框中输入asp.net&#xff0c;并选择图中的 点击下一步 点击创建 然后&#xff0c;右键&#xff0c;添加&#xff0c;新建项 选择web窗体 点击添加 点击视图&#xff0c;工具箱 选择一个label&#xff0c;记住这个id 空白处右键&#xff0c;查看代码 添…