2月9日QT

优化登录框:

当用户点击取消按钮,弹出问题对话框,询问是否要确定退出登录,并提供两个按钮,yes|No,如果用户点击的Yes,则关闭对话框,如果用户点击的No,则继续登录

当用户点击的登录按钮,进行账号和密码的匹配,如果匹配成功,则弹出信息对话框,给出信息为,登录成功,并给出一个确定按钮,当用户点击该按钮后,关闭登录界面,弹出另一个界面

当账号和密码不匹配是,给出错误对话框,给出信息为账号和密码不匹配,是否重新登录,并提供两个按钮 Yes|No,如果用户点击了Yes,则清空密码框后,继续登录。如果用户点击的取消,则关闭登录界面

要求:静态成员函数版本和对象版本各至少实现一个

头文件:

复制代码
#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include<QPushButton> //按键类头文件
#include<QLabel>     //标题类头文件
#include<QLineEdit>  //行编辑器头文件
#include<QDebug>     //输出类头文件
#include<QMessageBox> //对话框类头文件
class Widget : public QWidget
{
    Q_OBJECT

public slots:
    void clicked_slot();

signals:
    void jump();

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

private:
    QLabel *lab1;
    QLabel *lab2;
    QLabel *lab3;
    QLineEdit *edit1;
    QLineEdit *edit2;
    QPushButton *btn1;
    QPushButton *btn2;
};
#endif // WIDGET_H

源文件:

复制代码
#include "widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    //设置整个界面
    resize(400,500);
    setWindowIcon(QIcon(":/pictrue/qq2.gif"));
    setWindowTitle("KK快聊");

    //给lable1实例化空间并设置(logo)
    lab1= new QLabel("logo",this);
    lab1->resize(400,160);
    lab1->setPixmap(QPixmap(":/pictrue/zz.gif"));
    lab1->setScaledContents(true);

    //给lable2实例化空间并设置(账号)
    lab2= new QLabel("账号",this);
    lab2->resize(50,40);
    lab2->move(40,200);
    //给lable3实例化空间并设置(密码)
    lab3= new QLabel("密码",this);
    lab3->resize(lab2->size());
    lab3->move(lab2->x(), lab2->y()+lab2->height()+10);

    //给edit1实例化空间并设置(输入账号)
    edit1=new QLineEdit(this);
    edit1->resize(200, 40);
    edit1->move(100,200);
    edit1->setAlignment(Qt::AlignCenter);        //设置对齐方式
    edit1->setPlaceholderText("请输入账号");      //设置占位文本
    //给edit2实例化空间并设置(输入密码)
    edit2=new QLineEdit(this);
    edit2->resize(edit1->size());
    edit2->move(edit1->x(), edit1->y()+edit1->height()+10);
    edit2->setAlignment(Qt::AlignCenter);        //设置对齐方式
    edit2->setPlaceholderText("请输入密码");      //设置占位文本
    edit2->setEchoMode(QLineEdit::Password);      //设置回显模式

    //给btn1实例化空间并设置(登录)
    btn1 = new QPushButton("登录", this);
    btn1->resize(50,30);
    btn1->move(140,400);
    //给btn2实例化空间并设置(取消)
    btn2 = new QPushButton("取消", this);
    btn2->resize(btn1->size());
    btn2->move(btn1->x()+btn1->width()+10, btn1->y());

    //将登陆按钮的clicked信号连接到自定义的槽函数
    QObject::connect(btn1,
                     &QPushButton::clicked,
                     this,
                     &Widget::clicked_slot);
    //设置取消按键的clicked信号
    QObject::connect(btn2, &QPushButton::clicked, [this]()
    {
        //实例化一个问题对话框的对象
        QMessageBox box(QMessageBox::Question,
                        "问题对话框",
                        "是否确定退出登录",
                         QMessageBox::Yes|QMessageBox::No,
                        this);
        //调用exec函数,将对话框显示出来
        int res=box.exec();
        if(res==QMessageBox::Yes)
        {
            close();
        }
    });

}

//登陆按钮点击信号的槽函数
void Widget::clicked_slot()
{
    //获取账号密码
    QString usrname =edit1->text();
    QString pwd =edit2->text();

    //判断账号和密码是否一致
    if(usrname==pwd)
    {
        //调用静态成员函数,创建一个信息对话框
        QMessageBox::information(this,
                          "信息对话框",
                          "登录成功",
                           QMessageBox::Ok);
        close();
        emit jump();
    }else
    {
        //实例化一个问题对话框的对象
        QMessageBox box(QMessageBox::Question,
                        "问题对话框",
                        "账号与密码不匹配,是否重新登录",
                         QMessageBox::Yes|QMessageBox::No,
                        this);
        //调用exec函数,将对话框显示出来
        int res=box.exec();
        if(res==QMessageBox::Yes)
        {
             edit2->clear();
        }else if(res==QMessageBox::No)
        {
             close();
        }

    }
}

Widget::~Widget()
{
}
相关推荐
做一个AC梦9 分钟前
MiniOB环境部署开发(使用Docker)
数据库·sql·miniob·ob·海扬数据库
我爱学嵌入式1 小时前
C语言:第18天笔记
c语言·开发语言·笔记
楚Y6同学2 小时前
QT之QSS的使用方法和常用控件的样式设置
开发语言·qt
ALLSectorSorft2 小时前
搭子交友 app 动态分享与打卡系统设计实现
java·服务器·数据库·人工智能·oracle·交友
wuyunhang1234562 小时前
Redis---事务
数据库·redis·缓存
满目8282 小时前
MongoDB 从入门到实践:全面掌握文档型 NoSQL 数据库核心操作
数据库·mongodb·非关系型数据库·文档型数据库·基础查询命令·进阶查询
Tacy02132 小时前
Redis 安装教程
数据库·redis·缓存
Yolo566Q3 小时前
“R语言+遥感”的水环境综合评价方法实践技术应用
开发语言·r语言
用手编织世界3 小时前
redis-缓存-双写一致性
数据库·redis·缓存
smilejingwei4 小时前
数据分析编程第二步: 最简单的数据分析尝试
数据库·算法·数据分析·esprocspl