QT:使用多窗口做一个登录注册小项目(登录窗口、登录结果窗口、注册窗口)

main.cpp

#include "loginresult.h"
#include "register.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;            //创建对象
    w.show();            //展示登录窗口

    LoginResult result;  //创建对象

    Register reg;

    //连接主窗口的信号与登录结果窗口的槽函数
    //发送登录是否成功信号
    QObject::connect(&w,SIGNAL(enter_login_result(bool)),&result,SLOT(enter_handler(bool))); //connect是一个static(静态)函数,通过类名与作用域符调用
    //连接登录结果窗口的信号与登录窗口的槽函数
    //发送重新登录信号
    QObject::connect(&result,SIGNAL(re_login()),&w,SLOT(re_login_handler()));
    //连接登录窗口的信号与注册窗口的槽函数
    //跳转用户注册界面
    QObject::connect(&w,SIGNAL(enter_register()),&reg,SLOT(register_handler()));
    //连接注册窗口的信号与登录窗口的槽函数
    //注册成功发信号
    QObject::connect(&reg,SIGNAL(re_login()),&w,SLOT(re_login_handler()));

    return a.exec();
}

widget.h(登录窗口)

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QCheckBox>
#include <QLabel>
#include <QLineEdit>
#include <QPushButton>
#include <Qmap>            //模板类

class Widget : public QWidget
{
    Q_OBJECT   //使用信号与槽函数

public:
    Widget(QWidget *parent = 0);
    ~Widget();
    
signals:
    void enter_login_result(bool result);  //信号:给登录结果窗口发送登录结果
    void enter_register();      //信号:点击注册按钮,隐藏登录窗口

private slots:
    void le_input_handler();   //槽函数:激活登录按钮
    void re_login_handler();   //槽函数:重新登录

private:
    QLabel *lb_account,*lb_passwd;   //标签:账号、密码
    QLineEdit *le_account,*le_passwd;  //行编辑器:账号、密码
    QCheckBox *cb_remember,*cb_show_passwd;  //复选框:记住密码、显示密码
    QPushButton *pb_login,*pb_register;  //按钮:登录、注册

};


#endif // WIDGET_H

widget.cpp

#include "widget.h"
#include <QHBoxLayout>
#include <QVBoxLayout>
#include <QDebug>

QMap<QString,QString> a_p_map;  //容器

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    setFixedSize(330,220);
    setWindowTitle("登录窗口");
    setFont(QFont("Times",10,QFont::Bold));

    lb_account = new QLabel("账号:",this);   //创建标签
    le_account = new QLineEdit(this);        //创建行编辑器
    connect(le_account,&QLineEdit::textChanged,this,&Widget::le_input_handler);  //账号文本内容改变触发槽函数

    QHBoxLayout *hbox1 = new QHBoxLayout();  //创建水平布局管理器
    hbox1->addWidget(lb_account);
    hbox1->addWidget(le_account);

    lb_passwd = new QLabel("密码:",this);              //创建标签
    le_passwd = new QLineEdit(this);                   //创建行编辑器
    le_passwd->setEchoMode(QLineEdit::Password);       //设置密码回响形式
    connect(le_passwd,&QLineEdit::textChanged,this,&Widget::le_input_handler);  //密码文本内容改变触发槽函数

    QHBoxLayout *hbox2 = new QHBoxLayout();          //创建水平布局管理器
    hbox2->addWidget(lb_passwd);
    hbox2->addWidget(le_passwd);

    cb_remember = new QCheckBox("记住密码",this);     //复选框

    cb_show_passwd = new QCheckBox("显示密码",this);  //复选框
    connect(cb_show_passwd,&QCheckBox::clicked,[=](){    //勾选显示密码复选框即显示密码
        if(cb_show_passwd->isChecked())
        {
        le_passwd->setEchoMode(QLineEdit::Normal);
        }
        else
        {
             le_passwd->setEchoMode(QLineEdit::Password);
        }
    });

    QHBoxLayout *hbox3 = new QHBoxLayout();    //创建水平布局管理器
    hbox3->addWidget(cb_remember);
    hbox3->addWidget(cb_show_passwd);

    pb_login = new QPushButton("登录",this);         //创建登录按钮
    pb_login->setEnabled(false);                    //不激活功能
    connect(pb_login,&QPushButton::clicked,[=](){   //点击登录按钮
        bool result = false;
        if(a_p_map.contains(le_account->text()) &&              //检测容器中是否包含行编辑器中输入的账号
           a_p_map.value(le_account->text()) == le_passwd->text())     //包含则获取对应的密码,并与行编辑器中输入的密码对比是否相等
        {
            result = true;
                qDebug()<<"密码正确";
        }
        else
        {
                qDebug()<<"密码错误";
        }
        hide();                                   //是否正确都将登录窗口隐藏

        emit enter_login_result(result);         //发送登录结果给登录结果窗口
    });

    pb_register = new QPushButton("注册",this);        //创建注册按钮

    QHBoxLayout *hbox4 = new QHBoxLayout();      //创建水平布局管理器
    hbox4->addWidget(pb_login);
    hbox4->addWidget(pb_register);

    QVBoxLayout *vbox = new QVBoxLayout();       //创建垂直布局管理器
    vbox->addLayout(hbox1);
    vbox->addLayout(hbox2);
    vbox->addLayout(hbox3);
    vbox->addLayout(hbox4);

    setLayout(vbox);                            //设置整个布局
    a_p_map.insert("admin","admin");           //容器中插入账号、密码
    qDebug()<<a_p_map;

    connect(pb_register,&QPushButton::clicked,[=](){     //点击注册按钮
        hide();                                          //隐藏登录窗口
        emit enter_register();                           //发送信号
    });

}

void Widget::le_input_handler()                 //槽函数:是否激活登录按钮
{
    if(le_account->text().isEmpty() ||         //账号或密码有一个为空则继续不激活
       le_passwd->text().isEmpty())
    {
        pb_login->setEnabled(false);
    }
    else                                       //激活
    {
        pb_login->setEnabled(true);
    }
}

void Widget::re_login_handler()               //槽函数:显示登录窗口
{
    show();
}

Widget::~Widget()
{

}

loginresult.h(登录结果窗口)

#ifndef LOGINRESULT_H
#define LOGINRESULT_H

#include <QWidget>
#include <QLabel>
#include <QLineEdit>
#include <QPushButton>

class LoginResult : public QWidget
{
    Q_OBJECT
public:
    explicit LoginResult(QWidget *parent = nullptr);

signals:  //信号只需要声明
    void re_login();
public slots:
    void enter_handler(bool result);  //槽函数:根据登录结果设置登录结果窗口
private:
    QLabel *lb;    //标签:登录结果
    QLineEdit *le;    //行编辑器
    QPushButton *pb_re_login,*pb_exit;  //2个按钮:重新登录、关闭
};

#endif // LOGINRESULT_H

loginresult.cpp

#include "loginresult.h"
#include <QHBoxLayout>
#include <QVBoxLayout>

LoginResult::LoginResult(QWidget *parent) : QWidget(parent)
{
    setWindowTitle("登录结果窗口");
    setFixedSize(330,220);
    setFont(QFont("Times",10,QFont::Bold));

    lb = new QLabel("登录结果",this);              //创建标签

    le = new QLineEdit(this);                     //创建行编辑器
     le->setReadOnly(true);                       //设置为只读
    QHBoxLayout *hbox1 = new QHBoxLayout();       //创建水平布局管理器
    hbox1->addWidget(lb);
    hbox1->addWidget(le);

    pb_re_login = new QPushButton("重新登录",this);      //创建重新登录按钮
    connect(pb_re_login,&QPushButton::clicked,[=](){   //点击重新登录按钮
        hide();                                        //隐藏登录结果窗口
        emit re_login();                               //发送信号
    });

    pb_exit = new QPushButton("关闭",this);             //创建关闭按钮
    connect(pb_exit,&QPushButton::clicked,[=](){       //实现关闭功能
        close();
    });

    QHBoxLayout *hbox2 = new QHBoxLayout();            //创建水平布局管理器
    hbox2->addWidget(pb_re_login);
    hbox2->addWidget(pb_exit);

    QVBoxLayout *vbox = new QVBoxLayout();             //创建垂直布局管理器
    vbox->addLayout(hbox1);
    vbox->addLayout(hbox2);

    setLayout(vbox);       //设置整个布局

}

void LoginResult::enter_handler(bool result)         //槽函数:设置登录结果窗口
{
    if(result)                                       //为真
    {
        le->setText("登录成功");
        pb_re_login->hide();                         //隐藏重新登录按钮
    }
    else
    {
        le->setText("登录失败");
    }

    show();                //显示登录结果窗口
}

register.h(用户注册窗口)

#ifndef REGISTER_H
#define REGISTER_H

#include <QWidget>
#include <QLabel>
#include <QLineEdit>
#include <QPushButton>
#include <Qmap>

class Register : public QWidget
{
    Q_OBJECT
public:
    explicit Register(QWidget *parent = nullptr);

signals:
    void re_login();  //注册完成
public slots:
    void register_handler();  //槽函数:显示用户注册窗口
    void le_name_paswd_handler();  //激活注册按钮
private:
    QLabel *lb_title,*lb_name,*lb_passwd,*lb_re_passwd;
    QLineEdit *le_name,*le_passwd,*le_re_passwd;
    QPushButton *pb_register,*pb_exit;

};

#endif // REGISTER_H

register.cpp

#include "register.h"
#include <QHBoxLayout>    //水平布局
#include <QVBoxLayout>    //垂直布局
#include <QMap>
#include <QDebug>

extern QMap<QString,QString> a_p_map;

Register::Register(QWidget *parent) : QWidget(parent)
{
     setWindowTitle("用户注册窗口");
     setFixedSize(330,220);

     lb_title = new QLabel("请输入您的注册信息",this);         //创建标签
     QFont font("Times",16,QFont::Bold);
     lb_title->setFont(font);                               //设置标签字体大小
     lb_title->setAlignment(Qt::AlignCenter);               //居中对齐

     lb_name = new QLabel("用户名:",this);                   //创建标签
     le_name = new QLineEdit(this);                         //创建行编辑器

     QHBoxLayout *hbox1 = new QHBoxLayout();                //创建水平布局管理器
     hbox1->addWidget(lb_name);
     hbox1->addWidget(le_name);

     lb_passwd = new QLabel("请输入密码:",this);              //创建标签
     le_passwd = new QLineEdit(this);                       //创建行编辑器
     le_passwd->setEchoMode(QLineEdit::Password);           //设置密码回响模式

     QHBoxLayout *hbox2 = new QHBoxLayout();                //创建水平布局管理器
     hbox2->addWidget(lb_passwd);
     hbox2->addWidget(le_passwd);

     lb_re_passwd = new QLabel("请确认密码:",this);           //创建标签
     le_re_passwd = new QLineEdit(this);                    //创建行编辑器
     le_re_passwd->setEchoMode(QLineEdit::Password);        //设置密码回响模式

     QHBoxLayout *hbox3 = new QHBoxLayout();                //创建水平布局管理器
     hbox3->addWidget(lb_re_passwd);
     hbox3->addWidget(le_re_passwd);

     pb_register = new QPushButton("注册",this);             //创建按钮
     pb_register->setEnabled(false);                        //先不激活
     pb_exit = new QPushButton("关闭",this);                 //创建按钮
     connect(pb_exit,&QPushButton::clicked,[=](){           //实现关闭功能
         close();
     });

     QHBoxLayout *hbox4 = new QHBoxLayout();                //创建水平布局管理器
     hbox4->addWidget(pb_register);
     hbox4->addWidget(pb_exit);

     QVBoxLayout *vbox = new QVBoxLayout();                 //创建垂直布局管理器
     vbox->addWidget(lb_title);
     vbox->addLayout(hbox1);
     vbox->addLayout(hbox2);
     vbox->addLayout(hbox3);
     vbox->addLayout(hbox4);

     setLayout(vbox);   //设置总布局

     //用于激活注册按钮
     connect(le_name,&QLineEdit::textChanged,this,&Register::le_name_paswd_handler);
     connect(le_passwd,&QLineEdit::textChanged,this,&Register::le_name_paswd_handler);
     connect(le_re_passwd,&QLineEdit::textChanged,this,&Register::le_name_paswd_handler);

     connect(pb_register,&QPushButton::clicked,[=](){         //完成注册功能
         if(a_p_map.contains(le_name->text()))
         {
             qDebug()<<"用户名已经存在";
             return;
         }
         if(le_passwd->text() != le_re_passwd->text())
         {
             qDebug()<<"两次输入的密码不一致";
             return;
         }
         a_p_map.insert(le_name->text(),le_passwd->text());    //插入注册信息
         qDebug()<<a_p_map;                                   //打印所有注册信息
         hide();                                              //注册成功后隐藏用户注册窗口
         emit re_login();                                     //发送信号给登录窗口
     });
}

void Register::register_handler()                            //槽函数:注册
{
    show();                                                  //显示用户注册窗口
}

void Register::le_name_paswd_handler()  //激活注册按钮
{
    if(le_name->text().isEmpty() ||
       le_passwd->text().isEmpty() ||
       le_re_passwd->text().isEmpty())
    {
        pb_register->setEnabled(false);
    }
    else
    {
        pb_register->setEnabled(true);
    }
}

结果

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值