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

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

结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/81843.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

有效的括号(栈的高频面试题)

一、题目描述 题目连接&#xff1a;有效的括号 给定一个只包括 (&#xff0c;)&#xff0c;{&#xff0c;}&#xff0c;[&#xff0c;] 的字符串 s &#xff0c;判断字符串是否有效。 有效字符串需满足&#xff1a; 左括号必须用相同类型的右括号闭合。左括号必须以正确的顺…

005-第一代光电小工具(一)

第一代光电小工具(一) 文章目录 第一代光电小工具(一)项目介绍大致原理描述核心控件QCustomPlot关于QCustomPlot 播放音频软件截图 关键字&#xff1a; Qt、 Qml、 QCustomPlot、 曲线、 SQLite 项目介绍 欢迎来到我们的 QML & C 项目&#xff01;这个项目结合了 QML&…

MySQL修改时间添加时间自动更新

第一种: database.php设置 false改为true;然后看是使用的什么框架 如果是tp5需要数据库是create_time和update_time字段 laravel的话,需要的是created_at和updated_at字段 如果想自定义的话,就在model文件里加上 protected $createTime create_at;// 默认的字段为create_t…

LED智能家居灯 开关调光 台灯落地灯控制驱动 降压恒流IC AP5191

产品描述 AP5191是一款PWM工作模式,高效率、外围简单、内置功率MOS管&#xff0c;适用于4.5-150V输入的高精度降压LED恒流驱动芯片。输出最大功率150W&#xff0c;最大电流6A。AP5191可实现线性调光和PWM调光&#xff0c;线性调光脚有效电压范围0.55-2.6V.AP5191 工作频率可以…

sketch for Mac快捷键大全

你可以在sketch中使用键盘快捷键来加快你的设计过程。要使用键盘快捷键&#xff0c;请同时按下下列列表的所有键。有些命令只能根据你在做什么或者你选择了什么才启用&#xff0c;所有把命令分成了下列不同的部分。 sketch下载地址&#xff1a;sketch 破解-Sketch for mac(专业…

# (1462. 课程表 IV leetcode)广搜+拓扑-------------------Java实现

&#xff08;1462. 课程表 IV leetcode&#xff09;广搜拓扑-------------------Java实现 题目表述 你总共需要上 numCourses 门课&#xff0c;课程编号依次为 0 到 numCourses-1 。你会得到一个数组 prerequisite &#xff0c;其中 prerequisites[i] [ai, bi] 表示如果你想…

【Unity程序技巧】Unity中的单例模式的运用

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;Uni…

iptables 防火墙配置

文章目录 iptables 防火墙配置规则链的分类–五链处理的动作iptables 常用参数和作用iptables 防火墙配置查看规则链清空规则链设置默认规则将流入的流量丢弃允许ICMP协议流量通过删除默认策略允许所以流量通过设置将所有流入22端口的流量全部拒绝允许指定网段的22端口通过设置…

selenium学习

selenium模块和爬虫之间的关联 便捷的获取网站中动态加载的数据便捷实现模拟登录 什么是selenium模块 基于浏览器自动化的一个模块 selenium使用流程&#xff1a; - 环境安装&#xff1a;pip install selenium - 下载一个浏览器的驱动程序&#xff08;谷歌浏览器&#xff…

【数据分享】2000-2022年全球范围500m分辨率类NPP-VIIRS夜间灯光数据

夜间灯光数据是我们在各项研究中经常使用的数据&#xff01;我们平时使用的夜间灯光数据主要来源于NPP/VIIRS和DMSP/OLS两种渠道&#xff0c;这两种数据由于分辨率、数据年份、传感器等不同存在不兼容的情况限制了长时序夜间灯光数据的使用&#xff0c;针对该问题我们之前分享过…

已解决 Kotlin Error: Type mismatch: inferred type is String but Int was expected

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页: &#x1f405;&#x1f43e;猫头虎的博客&#x1f390;《面试题大全专栏》 &#x1f995; 文章图文并茂&#x1f996…

【AI视野·今日Robot 机器人论文速览 第三十五期】Mon, 18 Sep 2023

AI视野今日CS.Robotics 机器人学论文速览 Mon, 18 Sep 2023 Totally 44 papers &#x1f449;上期速览✈更多精彩请移步主页 Interesting: &#x1f4da;GelSplitter, 基于近红外与可见光融合实现高精度surfaceNormal重建的触觉传感器。(from 华中科技大学) 基于分光镜的紧凑型…

nginx代理socket链接集群后,频繁断开重连

目录 一、场景二、具体表现如下三、nginx代理配置四、nginx报错信息1、nginx错误日志2、nginx访问日志 五、服务端socket链接日志六、原因七、解决 一、场景 nginx使用集群模式代理多个socket链接&#xff0c;socket链接频繁断开重连 二、具体表现如下 三、nginx代理配置 ## …

Truenas Scale 安装 Official NextCloud

参考 Lawrence Systems 的 Youtube,频道有教程。 安装 安装 Collabora&#xff0c;只需要修改 账户&#xff0c;密码&#xff0c;及证书。 新增 dataset&#xff0c;名称 “NextCloud_Database”&#xff0c;其他默认新增 dataset&#xff0c;名称 “NextCloud_Data”&#…

什么是边缘计算网关?

边缘计算网关&#xff08;简称 边缘网关&#xff09;将云端功能扩展到本地的边缘设备&#xff0c;使边缘设备能够快速自主地响应本地事件&#xff0c;提供低延时、低成本、隐私安全、本地自治的本地计算服务。 同时所有服务都以 Docker 镜像方式安装&#xff0c;真正做到了跨平…

vue-grid-layout移动卡片到页面底部时页面滚动条跟随滚动

问题描述&#xff1a;默认情况下 vue-grid-layout 移动卡片到页面底部时页面滚动条并不会跟随卡片滚动。 问题解决&#xff1a; 在 grid-item中的move事件中&#xff0c;获取到当前移动的元素&#xff0c;并使用scrollIntoView方法来实现滚动条跟随。 代码如下&#xff1a; c…

安卓系列机型 另类体验第三方系统 DSU操作步骤解析 不影响主系统开启第二系统

dsu loader即 动态系统更新&#xff0c;可以在使用动态分区的安卓设备上&#xff0c;不影响原来系统的同时安装一个副系统&#xff0c;用于体验最新的原生安卓系统。可以不影响主系统的基础上体验其他gsi第三方。DSU 依赖于 Android 动态分区功能&#xff0c;并要求 GSI 作为可…

python爬虫爬取电影数据并做可视化

思路&#xff1a; 1、发送请求&#xff0c;解析html里面的数据 2、保存到csv文件 3、数据处理 4、数据可视化 需要用到的库&#xff1a; import requests,csv #请求库和保存库 import pandas as pd #读取csv文件以及操作数据 from lxml import etree #解析html库 from …

山西电力市场日前价格预测【2023-09-19】

日前价格预测 预测说明&#xff1a; 如上图所示&#xff0c;预测明日&#xff08;2023-09-19&#xff09;山西电力市场全天平均日前电价为358.08元/MWh。其中&#xff0c;最高日前电价为417.72元/MWh&#xff0c;预计出现在19: 00。最低日前电价为325.97元/MWh&#xff0c;预计…

十四、流式编程(2)

本章概要 中间操作 跟踪和调试流元素排序移除元素应用函数到元素在 map() 中组合流 中间操作 中间操作用于从一个流中获取对象&#xff0c;并将对象作为另一个流从后端输出&#xff0c;以连接到其他操作。 跟踪和调试 peek() 操作的目的是帮助调试。它允许你无修改地查看…