9.18号作业

2023-09-18 22:52:50

完善登录框

点击登录按钮后,判断账号(admin)和密码(123456)是否一致,如果匹配失败,则弹出错误对话框,文本内容“账号密码不匹配,是否重新登录”,给定两个按钮ok和cancel,点击ok后,会清除密码框中的内容,继续进行登录;如果点击cancel按钮,则关闭界面。

如果账号和密码匹配,则弹出信息对话框,给出提示信息为“登录成功”,给出一个按钮ok,点击ok后,关闭整个登录界面,跳转到其他界面

点击取消按钮后,弹出问题对话框,询问是否确定要退出登录,给出两个按钮,yes|no,点击yes,则直接关闭整个登录界面,如果点击no则进行进行登录

要求:消息对话框,对象版和静态成员函数版至少各实现一个

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>

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


private:
QPushButton *btn1;

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

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

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

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

widget.cpp

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

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    //构造一个登录按钮,并指定父组件,图标,和文本内容
     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());
    //实例化一个标签并指定父组件
    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);
       edit1->setMaxLength(6);

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

}

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

思维导图

更多推荐

在TensorFlow中使用GAN生成图像

一、说明本文详细论述,如何在tensorflow下,在mnist数据集合上进行GAN实现。包括:框架建立、数据集读出、生成器、鉴别器、代价函数、优化等具体步骤的代码实现。二、GAN框架介绍生成器:此组件负责生成新图像。鉴别器:此组件评估生成的图像的质量。我们将开发的使用GAN生成图像的一般架构如下图所示。以下部分简要介

Oracle PLSQL编程

文章目录PLSQL介绍1.dbms_output用法2.赋值操作2.1:=2.2into2.3属性类型3.控制语句if语句case语句无限循环有条件循环for循环goto4.动态SQL语句5.异常语句PLSQL介绍PLSQL过程语言(ProceduralLanguage)与结构化查询语言(SQL)结合而成的编程语言.通

Elasticsearch:为具有许多 and/or 高频术语的 top-k 查询带来加速

作者:AdrienGrandDisjunctivequeries(term_1ORterm_2OR...ORterm_n)非常常用,因此在提高查询评估效率方面它们受到了广泛关注。ApacheLucene对于评估disjunctivequeries有两个主要优化:一方面用于详尽评估的BS1,另一方面用于计算热门命中的MA

干货 | 中国石化化工高端新材料价格体系模型构建

以下内容整理自2023年夏季学期大数据能力提升项目《大数据实践课》同学们所做的期末答辩汇报。随着石化行业市场日趋饱和,市场竞争日益激烈,企业利润空间不断被压缩,大多数石化企业急需转型开拓新市场,化工原料价格的波动对于石化企业的决策和利润都会产生直接影响,所以对于化工原料价格精确、高效的预测显得尤为重要。目前业界已有部分

Python之并发编程

目录关于进程进程的内存空间进程通信线程协程进程状态模型进程的组成pcbthreading模块创建和启动join阻塞设置前台/后台线程自定义线程类线程锁互斥锁(普通锁)LockRlock原始锁重入锁如何避免产生死锁?信号量Semaphore事件锁Event条件锁Condition全局解释器锁GIL多进程os.forkmu

Go语言进化之路:泛型的崛起与复用的新篇章

一、引言泛型编程在许多编程语言中都是一项非常强大的特性,它可以使程序更加通用、具有更高的重用性。然而,Go语言在很长一段时间内一直没有提供泛型功能。在过去的一些版本中,Go语言开发者试图引入泛型,但最终都因为各种原因被取消或搁置了。直到Go1.18版本,终于引入了泛型功能。在本文中,将会介绍这项新特性及其使用方法。二、

MATLAB向量化编程基础精讲教程

向量化编程是MATLAB中一种重要的编程技术,通过使用向量和矩阵运算代替循环,可以提高代码的执行效率和可读性。本文将介绍MATLAB向量化编程的基础知识,并提供多个案例代码,帮助读者理解和应用向量化编程。一、向量化编程基础知识:利用内置函数:MATLAB提供了许多内置函数,这些函数经过优化,能够高效地处理向量和矩阵操作

【图像去噪】【TGV 正则器的快速计算方法】通过FFT的总(广义)变化进行图像去噪(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。⛳️座右铭:行百里者,半于九十。📋📋📋本文目录如下:🎁🎁🎁目录💥1概述📚2运行结果🎉3参考文献🌈4Matlab代码实现💥1概述【图像去噪】【TGV正则化器的快速计算方法】通过F

统一网关Gateway

2.5统一网关Gateway网关功能:身份认证和权限校验服务路由、负载均衡请求限流权限控制:网关作为微服务入口,需要校验用户是是否有请求资格,如果没有则进行拦截。路由和负载均衡:一切请求都必须先经过gateway,但网关不处理业务,而是根据某种规则,把请求转发到某个微服务,这个过程叫做路由。当然路由的目标服务有多个时,

蓝牙核心规范(V5.4)10.9-BLE 入门笔记之GAP

1.概述蓝牙核心规范的通用访问配置文件(GAP)部分定义了与设备发现和在两个设备之间建立连接有关的过程。如何执行数据的基本无连接通信、如何使用周期性广播(参见PADVB-LEPeriodicAdvertisingBroadcast)以及如何设置等时通信(参见LEBIS和LECIS-IsochronousCommunic

基于高校图书馆的用户画像、可视化、模型预测、推荐算法项目实现

需要本项目的可以私信博主获取源码及项目!!!本研究基于高校图书馆的借阅信息、馆藏图书信息、读者入馆信息、用户信息等多维度的数据表,首先将不同年份的数据拼接在一起,按照时间维度进行整合,并保证数据维度字段一致性。然后对数据进行清洗,其中包括空值的检测和处理,采用Python的正则表达式模块对某些字段进行约束约束和处理,比

热文推荐