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()),®,SLOT(register_handler()));
- //连接注册窗口的信号与登录窗口的槽函数
- //注册成功发信号
- QObject::connect(®,SIGNAL(re_login()),&w,SLOT(re_login_handler()));
-
- return a.exec();
- }
widget.h(登录窗口)
- #ifndef WIDGET_H
- #define WIDGET_H
-
- #include
- #include
- #include
- #include
- #include
- #include
//模板类 -
- 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
- #include
- #include
-
- QMap
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()<
-
- 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
- #include
- #include
- #include
-
- 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
- #include
-
- 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
- #include
- #include
- #include
- #include
-
- 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
//水平布局 - #include
//垂直布局 - #include
- #include
-
- extern QMap
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()<
//打印所有注册信息 - 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);
- }
- }
结果








