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()
{
}
相关推荐
Hello.Reader5 分钟前
Rust 命令行参数解析:以 minigrep 为例
开发语言·chrome·rust
Lanwarf-前端开发34 分钟前
gis风场加载
开发语言·前端·javascript
程序员林北北41 分钟前
【Golang学习之旅】gRPC 与 REST API 的对比及应用
java·开发语言·后端·学习·云原生·golang
钢铁男儿1 小时前
Python 字典(一个简单的字典)
开发语言·python
游王子1 小时前
Python Pandas(7):Pandas 数据清洗
开发语言·python·pandas
0wioiw01 小时前
Python基础(SQLAlchemy)
java·开发语言·数据库
dkgee2 小时前
conda将python低版本环境升级到高版本
开发语言·python·conda
风雨飘逸2 小时前
【shell&bash进阶系列】(四)SHELL脚本--变量(基础)
linux·运维·服务器·开发语言·经验分享·bash
CodeJourney.2 小时前
DeepSeek 关联 Word 使用教程:解锁办公新效率
数据库·人工智能·算法
Xiezequan2 小时前
QT修仙之路2-2 对话框 尚欠火候
开发语言·qt