Qt 实现仿QQ登录界面的完善

news/2024/5/6 0:58:07/文章来源:https://blog.csdn.net/qq_45806725/article/details/129997007

目录

  • 要求
  • 头文件
    • widget.h
    • form.h
  • 源文件
    • widget.cpp
    • form.cpp
  • 主函数 main.cpp
  • 结果展示

要求

完善登录界面
点击登录按钮后,判断账号和密码是否一致,如果匹配失败,则弹出错误对话框,文本内容“账号密码不匹配,是否重新登录”,给定两个按钮ok和cancel,点击ok后,会清除密码框中的内容,继续进行登录;如果点击cancel按钮,则关闭界面。
如果账号和密码匹配,则弹出信息对话框,给出提示信息为“登录成功”,给出一个按钮ok,点击ok后,关闭整个登录界面,跳转到其他界面
点击取消按钮后,弹出问题对话框,询问是否确定要退出登录,给出两个按钮,yes|no,点击yes,则直接关闭整个登录界面,如果点击no则进行进行登录
要求:对象版和静态成员函数版至少各实现一个

头文件

widget.h

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>#include <QIcon>
#include <QDebug>
#include <QLabel>
#include <QLineEdit>#include <QPushButton>#include <QApplication>      //包含应用程序的头文件
#include<iostream>
using namespace std;#include <QMessageBox>    //消息对话框的头文件QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTsignals://声明信号函数的权限void mysignal();    //此时定义了一个无参无返的信号函数void mysignal_1(QString e);      //自定义一个属于自己的信号函数public slots://槽函数声明的权限void myslot();    //自定义了一个无参无返的槽函数void myslot_2();        //取消登录按钮使用的槽函数public:Widget(QWidget *parent = nullptr);~Widget();private:Ui::Widget *ui;
};
#endif // WIDGET_H

form.h

#ifndef FORM_H
#define FORM_H#include <QWidget>namespace Ui {
class Form;
}class Form : public QWidget
{Q_OBJECTpublic slots:void myslot_1(QString e);    //自定义槽函数的声明public:explicit Form(QWidget *parent = nullptr);~Form();private:Ui::Form *ui;
};#endif // FORM_H

源文件

widget.cpp

#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//设置固定尺寸this->setFixedSize(420,300);//设置窗口标题this->setWindowTitle("LQS");//设置窗口图标this->setWindowIcon(QIcon("E:\\Learning\\Qt_work\\qt_01\\TIM.png"));//定义一个标签,实例化对象,调用无参构造【背景图片】QLabel *lab0 = new QLabel;lab0->setParent(this);    //设置父组件lab0->resize(420, 100);//    qDebug()<<lab0->text();     //获取组件的文本信息lab0->setPixmap(QPixmap("E:\\Learning\\Qt_work\\qt_01\\panda.png"));    //设置填充内容为图片lab0->setScaledContents(true);           //设置填充格式,组件内容自适应//定义一个标签,实例化对象,调用无参构造【用户名】QLabel *lab1 = new QLabel;lab1->setParent(this);    //设置父组件lab1->move(100,120);lab1->resize(20, 20);lab1->setText("用户名:");
//    qDebug()<<lab1->text();     //获取组件的文本信息lab1->setPixmap(QPixmap(":/icon/userName.jpg"));    //设置填充内容为图片lab1->setScaledContents(true);           //设置填充格式,组件内容自适应//定义一个行编辑器,实例化对象时,使用无参构造
//    QLineEdit *edt1 = new QLineEdit;
//    edt1->setParent(this);         //设置父组件
//    edt1->move(130,120);             //移动
//    edt1->resize(100,20);               //重新设置大小//定义一个标签,实例化对象,给定文本内容和父组件【密码】QLabel *lab2 = new QLabel("密码:", this);lab2->move(100,150);lab2->resize(20, 20);
//    qDebug()<<lab2->text();     //获取组件的文本信息lab2->setPixmap(QPixmap(":/icon/passwd.jpg"));    //设置填充内容为图片lab2->setScaledContents(true);//定义一个行编辑器,实例化对象时,使用有参构造
//    QLineEdit *edt2 = new QLineEdit(this);
//    edt2->move(130,150);
//    edt2->resize(100,20);               //重新设置大小
//    edt2->setEchoMode(QLineEdit::Password);           //设置回显模式//    //登录和取消按钮
//    //定义一个按钮,实例化对象时,顺便指定组件以及文本内容和图标
//    QPushButton *btn1 = new QPushButton("登录", this);
//    btn1->move(120,200);   //移动组件位置
//    btn1->resize(50, 30);     //重新设置按钮的尺寸
//    btn1->setIcon(QIcon("E:\\Learning\\Qt_work\\qt_01\\QQ.png"));     //设置图标
    btn1->setStyleSheet("background-color:red");    //设置按钮颜色//    QPushButton *btn2 = new QPushButton("取消", this);
//    btn2->move(180,200);   //移动组件位置
//    btn2->resize(btn1->size());     //使用btn1的尺寸,给btn3成功新设置尺寸
//    btn2->setIcon(QIcon("E:\\Learning\\Qt_work\\qt_01\\QQ.png"));     //设置图标connect(ui->btn1, &QPushButton::clicked, this, &Widget::myslot);   //按键登录
//    connect(ui->btn2, SIGNAL(clicked(bool)), this, SLOT(close()));     //按键退出connect(ui->btn2, &QPushButton::clicked, this, &Widget::myslot_2);     //取消登录按钮的完善//读取用户名和密码出的文本信息【跟踪打印信息】
//    qDebug()<<edt1->text();     //获取组件的文本信息
//    qDebug()<<edt2->text();     //获取组件的文本信息//将自定义的信号函数,与自定义槽函数进行连接connect(this, &Widget::mysignal_1, [](QString e){qDebug()<<e;    //将获取的内容输出到终端});}Widget::~Widget()
{delete ui;
}void Widget::myslot()
{if((ui->lab1->text() == "admin") && (ui->lab2->text() == "123456")){
//        cout<<"good"<<endl;int ret = QMessageBox::information(this,"信息","登录成功\n""点击继续", QMessageBox::Ok);      //静态函数版实现//对结果进行判断if(ret == QMessageBox::Ok){//关闭自身界面this->close();//跳转到其他界面emit mysignal_1("Hello hello hello");     //发送自定义信号}}else{int ret = QMessageBox::critical(this,"错误","账户密码不匹配\n""请重新登录", QMessageBox::Ok | QMessageBox::Cancel);//对结果进行判断if(ret == QMessageBox::Ok){ui->lab2->clear();  //清楚密码框中的内容}else if(ret == QMessageBox::Cancel){this->close();      //关闭自身界面,退出登录程序}}
}void Widget::myslot_2()
{//实例化对象,并调用构造函数QMessageBox box(QMessageBox::Question,      //问题对话框"问题框",                        //标题"是否要退出登录",            //文本内容QMessageBox::Yes | QMessageBox::No,this);          //父组件//调用exec进入运行态,功能:使对话框进入运行态,无参数,返回值为整型,对话框中点击的按钮值int ret = box.exec();//对用户点击的结果进行的响应if(ret == QMessageBox::Yes){this->close();}else if(ret == QMessageBox::No){ui->lab1->clear();ui->lab2->clear();}
}

form.cpp

#include "form.h"
#include "ui_form.h"Form::Form(QWidget *parent) :QWidget(parent),ui(new Ui::Form)
{ui->setupUi(this);
}Form::~Form()
{delete ui;
}void Form::myslot_1(QString e)
{this->show();       //显示Form界面
}

主函数 main.cpp

#include "widget.h"
#include "form.h"
#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);Widget w;w.show();Form f;//将w界面的自定义信号函数和f界面的槽函数进行连接QObject::connect(&w, &Widget::mysignal_1, &f, &Form::myslot_1);return a.exec();
}

结果展示

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

2023年造林绿化施工单位丙级资质,新申请要配备多少个人员呢?

&#xff08;一&#xff09;新申请资质程序&#xff1a; 1.网上申请。 2.书面材料报送。 &#xff08;二&#xff09;资质等级&#xff1a;分为甲级、乙级、丙级三个等级。 &#xff08;三&#xff09;丙级施工单位资质条件&#xff1a; 3.1 资历和信誉 应同时具备以下条…

python调用C++编译的动态库中的函数记录

1. 引言 在深度学习模型部署上经常需要用到python来处理C推理后的模型后处理部分&#xff0c;那么就可以用到pybind11来对C代码封装成动态库&#xff0c;方便python进行后处理操作 本验证demo的文件组成&#xff1a; 2.pybind11准备 首先安装一下对应包&#xff1a; pip …

凸优化学习笔记:等式约束凸优化问题的Newton方法、不可行初始点的Newton方法

文章目录凸优化学习笔记&#xff1a;等式约束凸优化问题的Newton方法、不可行初始点的Newton方法等式约束凸优化问题等式约束凸二次规划等式约束的Newton方法Newton方向&#xff1a;基于二阶近似的定义Newton减量&#xff1a;用于设计停止准则算法框架不可行初始点的Newton方法…

汇编实验4(99乘法表,整数分解,素数环,迷宫问题)【栈传参,递归,寻址方式】

目录 一、99乘法表 汇编代码 效果 二、整数拆分 问题描述 c代码 汇编代码 效果 三、素数环 问题描述 c代码 效果 四、迷宫问题 问题描述 c代码 汇编代码 效果 一、99乘法表 汇编代码 INCLUDE Irvine32.inc .data a db *,0 .code main PROC mov ebx,1;ebxi m…

从实际代码出发了解量子相位估计算法的原理

量子相位估计&#xff08;Quantum Phase Estimation, QPE&#xff09;是一种用于测量一个量子态的相位的算法。QPE算法的核心是一个相位估计电路&#xff0c;其中包含了一系列Hadamard变换、控制相位旋转门和逆量子傅里叶变换等量子门。其中&#xff0c;控制相位旋转门是QPE算法…

AI绘画热点模型大汇总,让你一次用个够

AI绘画热点模型大汇总&#xff0c;让你一次用个够 前段时间&#xff0c;在利用ControlNet重新定义你的AI姿势中提到了如何利用快捷方式节省谷歌硬盘&#xff0c;由于目前收集到的模型站点涉及的模型较少&#xff0c;且缺少lora模型。因此寻思着自己是不是也可以做一些热点模型…

【stable-diffusion】4090显卡下dreambooth、lora、sd模型微调的GUI环境安装(cuda驱动、pytorch、xformer)

相关博文 stable-diffusion-webui的基础功能手动安装&#xff0c;了解代码结构、依赖、模型出处 安装成功结果 主要参考 cuda11.7下载-https://developer.nvidia.com/cuda-toolkit-archivecudnn8.6 for 11.x : https://developer.nvidia.com/rdp/cudnn-archivedreambooth\lora…

Spring实战(开发Web应用)

开发Web应用展现信息构建领域类创建控制器类设计视图处理表单提交校验表单输入声明校验规则在表单绑定的时候执行校验展现校验错误视图控制器选择视图模板库小结展现信息 Taco Cloud是一个可以在线订购taco的地方。 Taco Cloud允许客户展现其创意&#xff0c; 能够让他们通过丰…

单点登录的认证过程,我拿到票据了, 可以卖肉了吗?

我拿到票据了, 可以卖肉了吗? SSO: 只能买一两, 不能再多了 单点登录的认证过程是如何的, 比方说单点登录服务D, 子系统A和B, A B D和浏览器之间是如何通信的 以下是单点登录&#xff08;SSO&#xff09;过程的详细步骤&#xff1a; 用户尝试访问子系统A。子系统A检查用户是否…

洛谷B2037奇偶数判断

洛谷B2037 题目描述 给定一个整数&#xff0c;判断该数是奇数还是偶数。如果 n 是奇数&#xff0c;输出 odd&#xff1b;如果 n 是偶数&#xff0c;输出 even。 输入格式 输入仅一行&#xff0c;一个整数 n。 输出格式 输出仅一行&#xff0c;如果n 是奇数&#xff0c;输出 o…

二分查找(二)

2.练习题 3&#xff09; 力扣https://leetcode.cn/problems/search-in-rotated-sorted-array-ii/这题需要分三种情况&#xff0c;第一种是区间有序&#xff0c;正常二分查找&#xff0c;第二种是区间 被旋转&#xff0c;左区间的值大于右区间&#xff0c;需要比较目标值和左区…

如何计算和提高客户生命周期价值 (LTV)

客户生命周期价值&#xff08;LTV或 CLV&#xff09;是衡量客户在其生命周期内为企业带来的总价值的关键指标。在电子商务中&#xff0c;LTV在决定企业的健康和成功方面起着至关重要的作用。LTV越高&#xff0c;业务的盈利能力和可持续性就越高。最常见的 LTV公式&#xff1a;L…

iphone distribution

未受信任的企业级开发者 通用 - VPN与设备管理 显示你下载的APP列表&#xff0c;点击进入 点击【信任xxxxx】

codeblocks20.3配置wxWidget3.2.2.1

codeblocks20.3 # 英文版自带gcc810&#xff0c;不汉化 wxWidget3.2.2.1 github下载源码 win11专业版 1.下载wxWidget3.2.2.1 源码 2.下载后解压到一个目录中&#xff0c;不要含中文和空格。我放在&#xff1a;d:\wxWidget3.2.2.1 3.打开终端cd build/msw 4.编译wxWidgets 为 …

多重背包问题 二进制优化 java 路径记录

多重背包---二进制拆分---java小知识_java多重背包问题_m78星云杰克的博客-CSDN博客 应该可以使用完全背包问题的记录路径的方法&#xff0c;例如&#xff0c;使用二维数组记录&#xff0c;记录当前硬币需要多少个

音视频骚操作,FFmpeg 如何播放带「图片」的 M3U8 视频,IJKPlyaer 适配非标 TS 文件

如果看到一个需要播放的视频链接显示是一张图片&#xff0c;你会不会感觉有点懵&#xff1f;如果这张图片写着 png&#xff0c;然后实际格式是 bmp &#xff0c;你会不会更懵了&#xff1f;如果这个 bmp 还做了加密篡改呢&#xff1f;今天我们要聊的就是这样一个充满骚操作的音…

css三角和css 用户见面样式,vertical-align 属性应用,溢出的文字省略号显示,常见布局技巧

目录 3.CSS三角 4.CSS 用户界面样式 4.1什么是界面样式 4.2轮廓线 outline 4.3 防止拖拽文本域 resize 5.vertical-align 属性 5.1图片,表单都属于行内块元素&#xff0c;默认的vertical-align 是基线对齐。 5.2解决图片底部默认空白缝隙问题 6.溢出的文字省略号显示 1.单…

linux centos7 查看端口占用命令netstat 报错提示 –bash:netstat:未找到命令解决方法

今天在一台centos7上用netstat命令看端口占用情况&#xff0c;提示 –bash:netstat:未找到命令&#xff1a; 解决方法&#xff1a; 输入 yum search ifconfig 查看这个命令是在 net-tools.x86_64里的&#xff1a; 然后安装这个包&#xff0c;输入 yum install net-tools 安装&…

ERTEC200P-2 PROFINET设备完全开发手册(2-1)

2. 入门指导&#xff1a;第一个PN IO设备 开发之前的准备&#xff0c;需要的软件&#xff1a; TIA Portal V16、V17串口终端软件 (MobaXterm或Putty或TeraTerm)Win10 并且安装64位JAVA运行环境J-Link的驱动软件Proneta&#xff08;推荐使用&#xff09; 需要准备的硬件 性能…

通信算法之130:软件无线电-接收机架构

1. 超外差式接收机 2.零中频接收机 3.数字中频接收机