qt day2

2023-09-18 20:41:48

完善登录框

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

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

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

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

登录失败功能、取消键功能

 登录成功弹窗、登录后界面跳转

 

 second.h

#ifndef SECOND_H
#define SECOND_H
#include <QWidget>
namespace Ui {
class Second;
}
class Second : public QWidget
{
    Q_OBJECT
public:
    explicit Second(QWidget *parent = nullptr);
    ~Second();

private:
    Ui::Second *ui;
public slots:
    void jump_slot();
};
#endif // SECOND_H

widget.h

#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QMessageBox>
#include<QPushButton>
#include<QLabel>
#include<QLineEdit>
#include "second.h"
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT
public:
    Widget(QWidget *parent = nullptr);
    ~Widget();
    void fun();
    QLabel *lab1;
    QLabel *lab2;
    QLabel *lab3;
    QLineEdit *edit1;
    QLineEdit *edit2;
    QPushButton *btn1;
    QPushButton *btn2;
private slots:
    void login_clicked();
    void cancel_clicked();
private:
    Ui::Widget *ui;
    Second *s1;
signals:
    void jump(); //自定义跳转函数
};
#endif // WIDGET_H

 main.cpp

#include "widget.h"
#include <QApplication>
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();
    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);
}
Second::~Second()
{
    delete ui;
}
void Second::jump_slot()
{
    this->show();//展示
}

 widget.cpp

#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    s1=new Second;
    connect(this,&Widget::jump,s1,&Second::jump_slot);
    resize(QSize(960,1200));             //使用匿名对象作为函数参数设置当前组件的尺寸
    setFixedSize(960,1200);                 //设置固定尺寸
    setWindowTitle("miHoYo");               //设置窗口标题
    setWindowIcon(QIcon(":/icon/qq.png"));     //设置窗口图标
    setStyleSheet("background-color:white;");              //设置样式表
    setWindowOpacity(2);                              //设置窗口透明度
    lab1 = new QLabel(this);
    lab1->resize(960,532);           //重新设置尺寸
    lab1->setAlignment(Qt::AlignCenter);
   // lab1->setStyleSheet("background-color:yellow;");
    lab1->setPixmap(QPixmap(":/icon/logo.png"));       //设置图片
    lab1->setScaledContents(true);

    lab2 = new QLabel(this);
    lab2->resize(65,71);           //重新设置尺寸
    lab2->move(lab1->x()+200,lab1->y()+700);
    //lab2->setStyleSheet("background-color:yellow;");
    lab2->setPixmap(QPixmap(":/icon/user.jpg"));       //设置图片
    lab2->setScaledContents(true);

    lab3 = new QLabel(this);
    lab3->resize(65,71);           //重新设置尺寸
    lab3->move(lab2->x(),lab2->y()+150);
    lab3->setAlignment(Qt::AlignCenter);
    //lab3->setStyleSheet("background-color:yellow;");
    lab3->setPixmap(QPixmap(":/icon/passwd.jpg"));       //设置图片
    lab3->setScaledContents(true);

    edit1 = new QLineEdit(this);
    edit1->resize(350,50);
    edit1->move(lab2->x()+120, lab2->y());
    edit1->setEchoMode(QLineEdit::Normal);        //设置回显模式
    edit1->setMaxLength(11);
    edit1->setPlaceholderText("账号/手机/邮箱");         //设置占位文本

    edit2 = new QLineEdit(this);
    edit2->resize(350,50);
    edit2->move(lab3->x()+120, lab3->y());
    edit2->setEchoMode(QLineEdit::Password);        //设置回显模式
    edit2->setMaxLength(10);
    edit2->setPlaceholderText("密码");         //设置占位文本

    btn1 = new QPushButton;//无参构造
    connect(btn1,&QPushButton::clicked,this,&Widget::login_clicked);
    btn1->setParent(this);                     //将当前界面作为父组件
    btn1->setText("登录");                      //设置按钮上的文本内容
    btn1->resize(100,30);                         //重新设置组件尺寸
    btn1->setIcon(QIcon(":/icon/login.png"));    //设置图标
    btn1->move(edit2->x()-20,edit2->y()+150);                          //移动组件位置

    btn2 = new QPushButton;            //无参构造
    connect(btn2,&QPushButton::clicked,this,&Widget::cancel_clicked);
    btn2->setParent(this);                     //将当前界面作为父组件
    btn2->setText("取消");                      //设置按钮上的文本内容
    btn2->resize(100,30);                         //重新设置组件尺寸
    btn2->setIcon(QIcon(":/icon/cancel.png"));    //设置图标
    btn2->move(btn1->x()+250,btn1->y());

}

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

//登录按钮对应的槽函数
void Widget::login_clicked()
{
    //登录失败
    if(edit1->text()!="admin"&&edit2->text()!="123456")
    {
        //调用构造函数实例化对象
        QMessageBox box(QMessageBox::Critical,//图标
                        "错误",//对话框标题
                        "账号密码不匹配,是否重新登录",//对话框文本
                        QMessageBox::Yes|QMessageBox::No,//提供的按钮
                        this);//父组件
        box.setDefaultButton(QMessageBox::Yes);
        box.setButtonText(QMessageBox::Yes,"OK");
        box.setButtonText(QMessageBox::No,"cancel");
        //调用exec函数运行对话框
        int ret = box.exec();
        //对结果进行判断
        if(ret==QMessageBox::Yes)
        {
            //清空内容
            edit1->clear();
        }
        else
        {
            //关闭界面
            this->close();
        }
    }
    //登录成功
    else
    {
        //调用构造函数实例化对象
        QMessageBox box(QMessageBox::NoIcon,//图标
                        " ",//对话框标题
                        "登录成功",//对话框文本
                        QMessageBox::Ok,//提供的按钮
                        this);//父组件
        box.exec();//运行对话框
        emit jump();//跳转界面
        this->close();//关闭当前界面
    }

}

//退出按钮
void Widget::cancel_clicked()
{
    int ret=QMessageBox::warning(this,
                         "警告",
                         "是否确定要退出登录",
                         QMessageBox::Yes | QMessageBox::No,
                         QMessageBox::No);

    //对结果进行判断如果点yes则关闭
    if(ret==QMessageBox::Yes)
    {
        this->close();//关闭界面
    }
}

 

 

更多推荐

视频汇聚/视频云存储/视频监控管理平台EasyCVR分发rtsp流起播慢优化步骤详解

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安防视频监控的能力,也具备接入AI智能分析的能力,可拓

​LeetCode解法汇总2490. 回环句

目录链接:力扣编程题-解法汇总_分享+记录-CSDN博客GitHub同步刷题项目:https://github.com/September26/java-algorithms原题链接:力扣描述:句子是由单个空格分隔的一组单词,且不含前导或尾随空格。例如,"HelloWorld"、"HELLO"、"helloworldh

Docker从认识到实践再到底层原理(五)|Docker镜像

前言那么这里博主先安利一些干货满满的专栏了!首先是博主的高质量博客的汇总,这个专栏里面的博客,都是博主最最用心写的一部分,干货满满,希望对大家有帮助。高质量博客汇总然后就是博主最近最花时间的一个专栏《Docker从认识到实践再到底层原理》希望大家多多关注!Docker从认识到实践再到底层原理第五章-镜像Docker镜像

飞行动力学 - 基础点摘要整理

飞行动力学-基础点摘要整理随着飞行动力学视频完整看了一遍,大体对飞行动力学有了基本的了解。从其根本原理和概念来看,并不是非常复杂,将经典力学用于飞机,进行了各种飞行场景的解析。当然,一遍也只能知道一个大概,不过对于从来没有接触过飞行动力学的我来说,是一个全新的角度对于经典力学的应用。顺便也对于之前整理的一些摘要或者说课

KMP,ACM集训

目录831.KMP字符串输入格式输出格式数据范围输入样例:输出样例:解析:KMP模板D-CyclicNacklace解析:KMP-next数组应用+循环字符串判断F-PowerStrings解析:KMP-next数组应用+循环字符串判断H-Countthestring解析:next数组理解J-StringProblem

软件设计师笔记系列(四)

😀前言随着技术的快速发展,软件已经成为我们日常生活中不可或缺的一部分。从智能手机应用到大型企业系统,软件都在为我们提供便利、增强效率和创造价值。然而,随之而来的是对软件质量的日益增长的关注。软件的质量不仅关乎其功能性和性能,还涉及其可靠性、使用性、可维护性和可移植性。为了更好地理解和评估软件的质量,我们需要一个结构化

day49:QT day2,信号与槽、对话框

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

比特币 ZK 赏金系列:第 1 部分——支付解密密钥

以前,我们使用零知识赏金(ZKB)来支付比特币上的数独解决方案。在本系列中,我们将使用ZKB来解决范围更广的更实际的问题。在第1部分中,我们应用ZKB来支付解密密钥。假设Alice使用对称密钥K加密她的文件。为了安全起见,她联系了在线备份服务Bob,以保留K的副本。她不想让Bob知道K,所以她使用门限秘密共享方案将K分

FPGA 图像缩放 千兆网 UDP 网络视频传输,基于88E1518 PHY实现,提供工程和QT上位机源码加技术支持

目录1、前言版本更新说明免责声明2、相关方案推荐UDP视频传输--无缩放FPGA图像缩放方案我这里已有的以太网方案3、设计思路框架视频源选择IT6802解码芯片配置及采集动态彩条跨时钟FIFO图像缩放模块详解设计框图代码框图2种插值算法的整合与选择UDP协议栈UDP视频数据组包UDP协议栈数据发送UDP协议栈数据缓冲I

【华为OD机试python】模拟消息队列【2023 B卷|100分】

【华为OD机试】-真题!!点这里!!【华为OD机试】真题考点分类!!点这里!!题目描述让我们来模拟一个消息队列的运作,有一个发布者和若干消费者,发布者会在给定的时刻向消息队列发送消息若此时消息队列有消费者订阅,这个消息会被发送到订阅的消费者中优先级最高(输入中消费者按优先级升序排列)的一个。若此时没有订阅的消费者,该消

【数据链路层】网络基础 -- MAC帧协议与ARP协议

数据链路层认识以太网以太网帧格式(MAC帧)认识MAC地址对比理解MAC地址和IP地址认识MTUMTU对IP协议的影响MTU对UDP协议的影响MTU对于TCP协议的影响再谈局域网转发原理(基于协议)ARP协议ARP协议的作用ARP协议的工作流程ARP数据报的格式数据链路层用于两个设备(同一种数据链路节点)之间进行传递在

热文推荐