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);
}
}
结果