9.21号作业

2023-09-21 21:43:47

实现把注册的信息导入数据库中

second.h

#ifndef SECOND_H
#define SECOND_H

#include <QWidget>
#include <QDebug>
namespace Ui {
class Second;
}

class Second : public QWidget
{
    Q_OBJECT
public:
    void newslot();
public:
    explicit Second(QWidget *parent = nullptr);
    ~Second();

private:
    Ui::Second *ui;
};

#endif // SECOND_H

widget.h

#ifndef WIDGET_H
#define WIDGET_H

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

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();


signals:
    void mysignals();


public slots:
    void userLogin();
    void userExit();
     void userregister();

private:
QPushButton *btn1;

QPushButton *btn2;
QPushButton *btn3;
QLabel *lab1;
QLabel *lab2;
QLabel *lab3;
QLineEdit *edit1;
QLineEdit *edit2;

private:
    Ui::Widget *ui;
        QSqlDatabase db;
};
#endif // WIDGET_H

widget.cpp

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    //判断自己的数据库对象中,是否包含了要处理的数据库,如果没有包含则添加一个数据库,如果包含了,就可以打开了
    if(!db.contains("mydatabase.db"))
    {
        //添加一个数据库,调用该类中的静态成员函数addDatabase
        db = QSqlDatabase::addDatabase("QSQLITE");
        //设置数据库的名字
        db.setDatabaseName("mydatabase.db");
    }


    //此时已经有一个名为mydatabase.db的数据库
    //打开数据库
    if(!db.open())
    {
        QMessageBox::information(this,"失败","数据库打开失败");
        return;
    }

    //需要使用sql语句进行创建表的操作
    //准备sql语句
    QString sql = "create table if not exists stu_info("           //创建表
                  " userName varchar(20) primary key,"                   //账号,主键
                  "password varchar(20))";                        //密码

    //准备语句执行者
    QSqlQuery querry;

    //让语句执行者执行sql语句
    //函数原型:bool exec(const QString& query);
    //参数:要执行的sql语句
    //返回值:成功执行返回true,失败返回false
    if(!querry.exec(sql))
    {
        QMessageBox::information(this, "失败", "创建表失败");
        return;
    }



    //构造一个登录按钮,并指定父组件,图标,和文本内容
     btn1=new QPushButton(QIcon("C:\\Users\\wuhuiwu\\Desktop\\login.png"),"登录",this);
    //设置固定长度
    this->setFixedSize(400,300);
    //设置窗口标题
    this->setWindowTitle("Widget");
    //设置窗口图标
    this->setWindowIcon(QIcon("C:\\Users\\wuhuiwu\\Desktop\\wodepeizhenshi.png"));
    //设置窗口尺寸
    btn1->setFixedSize(70,40);
    //移动按钮
    btn1->move(150,250);
    //再构造一个按钮,并给定父组件,图标,文本内容
    btn2=new QPushButton(QIcon("C:\\Users\\wuhuiwu\\Desktop\\cancel.png"),"取消",this);
    //设置按钮尺寸
    btn2->setFixedSize(70,40);
    //移动按钮
    btn2->move(btn1->x()+70,btn1->y());
    //再构造一个注册按钮,并给定父组件,图标,文本内容
    btn3=new QPushButton(QIcon("C:\\Users\\wuhuiwu\\Desktop\\register.png"),"注册",this);
    //设置按钮尺寸
    btn3->setFixedSize(70,40);
    //移动按钮
    btn3->move(btn2->x()+70,btn1->y());
    //实例化一个标签并指定父组件
    lab1=new QLabel(this);
    //设置尺寸
    lab1->resize(400,150);
    //设置图片
    lab1->setPixmap(QPixmap("C:\\Users\\wuhuiwu\\Desktop\\logo.png"));
     lab1->setScaledContents(true);
    //实例化一个标签并指定父组件
    lab2=new QLabel(this);
    //设置图片
    lab2->setPixmap(QPixmap("C:\\Users\\wuhuiwu\\Desktop\\userName.jpg"));
    //设置尺寸
    lab2->resize(40,30);
    //引动图标
     lab2->move(120,160);
      lab2->setScaledContents(true);
     //实例化一个标签并指定父组件
     lab3=new QLabel(this);
     //设置图片
     lab3->setPixmap(QPixmap("C:\\Users\\wuhuiwu\\Desktop\\passwd.jpg"));
     //设置尺寸
     lab3->resize(40,30);
     //移动图标
      lab3->move(lab2->x(),lab2->y()+50);
       lab3->setScaledContents(true);
      //构建一个文本编辑器
      edit1=new QLineEdit(this);
      //设置尺寸
      edit1->resize(100,30);
      edit1->move(lab2->x()+60,lab2->y());
      //设置占位文本
        edit1->setPlaceholderText("账号名");

      //构建一个文本编辑器
      edit2=new QLineEdit(this);
      //设置尺寸
      edit2->resize(100,30);
      edit2->move(edit1->x(),edit1->y()+50);
      //设置回显模式
       edit2->setEchoMode(QLineEdit::Password);

       //登录
       connect(this->btn1,&QPushButton::clicked,this,&Widget::userLogin);
        //退出
       connect(this->btn2,&QPushButton::clicked,this,&Widget::userExit);

       //注册
       connect(this->btn3,&QPushButton::clicked,this,&Widget::userregister);

}

Widget::~Widget()
{
    delete ui;
}
void Widget::userLogin()
{
    QString accout=this->edit1->text();
    QString password=this->edit2->text();
    if(accout=="admin"&&password=="123456")
    {
        qDebug()<<"匹配成功";

    QMessageBox box(QMessageBox::NoIcon,"success","登录成功",
                    QMessageBox::Ok);
    int res=box.exec();
    if(res==QMessageBox::Ok)
    {
        this->close();
        emit  mysignals();
    }
    }else
    {
        qDebug()<<"账户密码不匹配,是否重新登录";
        QMessageBox box1(QMessageBox::Critical,"error","账户密码错误",
                         QMessageBox::Ok|QMessageBox::Cancel);
        int res=box1.exec();
        if(res==QMessageBox::Ok)
        {
            this->edit2->clear();
        }
        else if(res==QMessageBox::Cancel)
        {

            this->close();
        }

    }

}
void Widget::userExit()
{
    QMessageBox box2(QMessageBox::Warning,"退出","要退出吗?",
                     QMessageBox::Yes|QMessageBox::No);
    int res=box2.exec();
    if(res==QMessageBox::Yes)

    {
        this->close();
    }
    else if(res==QMessageBox::No)
    {
        this->edit1->clear();
        this->edit2->clear();
    }
}

void Widget::userregister()
{
     //获取ui界面中要录入的数据
     QString userName = this->edit1->text();
     QString password=this->edit2->text();


     //要确保每个编辑器中都有数据
     if(userName.isEmpty() || password.isEmpty())
     {
         QMessageBox::information(this,"提示","请将信息填写完整");
         return;
     }
     QString sql = QString("insert into stu_info(userName,password) "
                      "values('%1', '%2')").arg(userName).arg(password);
     QSqlQuery querry;
     if(!querry.exec(sql))
     {
         QMessageBox::information(this,"失败", "添加失败");
         return;
     }else
     {
         QMessageBox::information(this,"成功", "添加成功");
     }

}

second.cpp

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

Second::Second(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Second)
{
    ui->setupUi(this);
}
void Second::newslot()
{
    this->show();            //将自己界面进行展示
}

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

main.cpp

#include "widget.h"
#include "second.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();

    Second s;
    QObject::connect(&w,&Widget::mysignals,&s,&Second::newslot);

    return a.exec();
}

思维导图

更多推荐

使用jmeter+ant+jenkins+git搭建自动化测试平台

最近正在学习自动化测试,于是随手搭建了一下jmeter+ant+jenkins+git平台。接下来,我会按照jdk,jmeter,ant,jenkins,git这个顺序一步一步的搭建起来。一、jdk。这个就不多说了。我用的是1.8版本的,配环境变量网上一大堆。二、jmeter。官网下载:ApacheJMeter-Dow

数据科学的文本技术 Text Technology(IR信息检索、搜索引擎)

一、文章摘要1.内容*IntroductiontoIRandtextprocessing,systemcomponents*Zipf,Heaps,andothertextlaws*Pre-processing:tokenization,normalisation,stemming,stopping.*Indexing:

在IntelliJ IDEA 中安装阿里P3C以及使用指南

在IntelliJIDEA中安装阿里P3C以及使用指南1.关于阿里p3c1.1说明1.2什么是P3C插件1.3p3c的作用是什么2如何在IDEA中安装p3c2.1插件安装2.2插件使用3.参考连接1.关于阿里p3c1.1说明代码规范检查插件P3C,是根据《阿里巴巴java开发手册(黄山版)》转化而成的自动化插件。1.2

Lnmp架构之mysql数据库实战1

1、mysql数据库编译编译成功2、mysql数据库初始化配置数据目录全局文件修改内容生成初始化密码并进行初始化设定3、mysql主从复制什么是mysql的主从复制?MySQL的主从复制是一种常见的数据库复制技术,用于将一个数据库服务器(称为主服务器)上的数据同步到另一个或多个数据库服务器(称为从服务器)上。在主从复制

ElasticSearch

文章目录一、引言1.1海量数据1.2全文检索二、ES概述2.1ES的介绍2.2ES的由来三、ElasticSearch安装3.1安装ES&Kibana3.2安装IK分词器四、ElasticSearch基本操作4.1ES的结构4.1.1索引Index,分片和备份4.1.2类型Type4.1.3文档Doc4.1.4属性Fi

【Linux学习笔记】 - 常用指令学习及其验证(下)

前言:本文延续上一篇文章【Linux学习笔记】-常用指令学习及其验证(上)对常用的指令进行介绍和验证。一、mv指令(1)功能:用来移动文件或者将文件改名(2)语法及验证:语法:mv[选项][源文件或目录][目标文件或目录]当第二个参数(即目标文件或目录)是不存在的文件或目录时,此时源文件或目录只能有一个,它将被重新命名

MVCC:多版本并发控制案例分析(二)

(笔记总结自b站马士兵教育课程)本文主要分析readview的案例。一、简介readview:表示事务进行快照读操作的时候产生的读视图,在该事务进行快照读的那一刻会生成一个系统当前的快照,但是此时的快照不是数据的快照,而是事务相关信息的快照。trx_listreadview生成时刻当前系统活跃的事务idup_limit

华为认证HCIP知识点

文章目录前言考试内容数据通信领域各场景通用核心知识OSPF知识点IS-IS知识点BGP知识点IGMP知识点ICMP知识点数据通信领域路由交换高阶知识总结前言本博客仅做学习笔记,如有侵权,联系后即刻更改科普:考试内容参考网址HCIP认证主要定位于中小型网络的规划、设计、配置与维护,包含网络基础、常见接口与电缆、以太网交换

数据结构学习笔记—— 排序算法总结【ヾ(≧▽≦*)o所有的排序算法考点看这一篇你就懂啦!!!】

目录一、排序算法总结(一)排序算法分类(二)表格比较二、详细分析(最重要考点!!!)(一)稳定性(二)时间复杂度(三)空间复杂度(四)比较次数(五)平均比较次数(六)排序趟数(七)根据规模选择排序算法(八)每趟确定的元素最终位置(九)存储方式的选择一、排序算法总结常用排序算法如下:#mermaid-svg-nyHNG1

驱动开发概念详解

1、什么是驱动能够驱使硬件实现特定功能的软件代码,可以根据驱动程序是否依赖于系统内核将其分为裸机驱动和系统驱动1.1裸机驱动编写的驱动代码中没有进行任何内核相关的API调用,开发者查询资料配置寄存器完成硬件相关控制,不依赖于系统内核,由开发者独立完成,相对而言比较简单。1.2系统驱动系统驱动指的是编写的驱动代码中需要调

了解JVM

一.了解JVM1.1什么是JVMJVM是JavaVirtualMachine(Java虚拟机)的缩写,是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟计算机功能来实现的,JVM屏蔽了与具体操作系统平台相关的信息,Java程序只需生成在Java虚拟机上运行的字节码,就可以在多种平台上不加修改的运行。JVM在执行字节

热文推荐