2025.1.8(qt图形化界面之消息框)

笔记(后期复习补充)

作业

1> 手动将登录项目实现,不要使用拖拽编程

并且,当点击登录按钮时,后台会判断账号和密码是否相等,如果相等给出登录成功的提示,并且关闭当前界面,发射一个跳转信号,如果登录失败,则给出登录失败的提示,并清空密码框

当点击取消按钮时,直接关闭当前登录框

优化登录框:

当用户点击取消按钮,弹出问题对话框,询问是否要确定退出登录,并提供两个按钮,yes|No,如果用户点击的Yes,则关闭对话框,如果用户点击的No,则继续登录

当用户点击的登录按钮,进行账号和密码的匹配,如果匹配成功,则弹出信息对话框,给出信息为,登录成功,并给出一个确定按钮,当用户点击该按钮后,关闭登录界面,弹出另一个界面

当账号和密码不匹配是,给出错误对话框,给出信息为账号和密码不匹配,是否重新登录,并提供两个按钮 Yes|No,如果用户点击了Yes,则清空密码框后,继续登录。如果用户点击的取消,则关闭登录界面

要求:静态成员函数版本和对象版本各至少实现一个

main。cpp文件

#include "widget.h"
#include "form.h"
#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);Widget w;Form f;w.show();QObject::connect(&w,&Widget::mysignal_1,&f,&Form::myform_verify);return a.exec();
}

form.h文件

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

widget.h头文件

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <QIcon>
#include <QLabel>
#include <QPushButton>
#include <QPixmap>
#include <QLineEdit>
#include <QTimer>           //延时头文件
#include <QMessageBox>      //对话框头文件
#include <QCheckBox>        //选择勾选按钮头文件#define btn1 btn_verify     //确认按钮
#define btn2 btn_Cancel         //取消按钮
#define label2 label_cipher     //密码标签
#define label1 label_account    //账户标签
#define line1 line1_account      //账户输入框
#define line2 line2_cipher     //密码输入框class Widget : public QWidget
{Q_OBJECTsignals:void  mysignal_1();   //自定义信号1void  mysignal_2();   //自定义信号2
public slots:void myslots1_verify();     //槽函数声明,确认按钮点击后的响应void color_1();         //恢复颜色void myslots2_verify();          //取消按钮点击后的响应void my_che1hh(int state);      // 勾选框状态变化的槽函数
public:Widget(QWidget *parent = nullptr);~Widget();private:QLabel *label_logo;QLabel *label1;QLabel *label2;QPushButton *btn1;QPushButton *btn2;QLineEdit *line1;QLineEdit *line2;QCheckBox *my_che1;        //勾选确认按钮定义
};
#endif // WIDGET_H

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::myform_verify()
{this->show();}

widget。cpp文件

#include "widget.h"
#include <QVBoxLayout>Widget::Widget(QWidget *parent): QWidget(parent)
{//主窗口设置this->setFixedSize(400,600);        //窗体大小this->setWindowIcon(QIcon(":/pictrue/qq2.gif"));    //图标this->setWindowTitle("霜雪快聊");       //窗体上文字this->setStyleSheet("background-color: lightpink; color: darkred;");//logo标签设置label_logo = new QLabel(this);   //实例化对象并认父组件label_logo->resize(200,150);        //logo窗体大小label_logo->move(100,50);label_logo->setAlignment(Qt::AlignCenter);      //文本居中label_logo->setPixmap(QPixmap("C:/Users/Administrator/Desktop/qqq.png"));   //图片载入label_logo->setScaledContents(true);    //大小自适应//label1账户标签设置label1 = new QLabel;    //实例化对象this->label1->setParent(this);      //设置父对象,方便管理生命周期等label1->setText("账户");              //设置文本label1->setPixmap(QPixmap(":/pictrue/wodepeizhenshi.png"));     //设置图标(图片)label1->resize(20,30);      //设置大小label1->move(50,250);       //相对于主窗口绝对位置label1->setScaledContents(true);            //大小自适应label1->setAlignment(Qt::AlignCenter);  //文本居中this->setStyleSheet("background-color:lightred;color:darkgreen;");      //设置颜色//label2密码标签设置label2 = new QLabel(this);    //实例化对象,设置父对象,方便管理生命周期等label2->setText("密码");              //设置文本label2->setPixmap(QPixmap(":/pictrue/passwd.jpg"));     //设置图标(图片)label2->resize(20,30);      //设置大小label2->move(label1->x(),label1->y()+label1->height()+50);       //相对于label1绝对位置label2->setScaledContents(true);            //大小自适应label2->setAlignment(Qt::AlignCenter);  //文本居中this->setStyleSheet("background-color:lightred;color:darkgreen;");      //设置颜色//line1账户输入框设置this->line1 = new QLineEdit(""); //实例化对象,设置文本this->line1->setParent(this);             //设置父对象line1->setPlaceholderText("请输入你的账号");   //设置提示性文本this->line1->resize(200,30);              //设置大小this->line1->move(label1->x()+label1->width()+50,label1->y());  //设置位置this->line1->setAlignment(Qt::AlignCenter);         //文本居中this->line1->setStyleSheet("background-color:lightred;color:darkgreen;");   //设置颜色(背景和字体)//line2密码输入框设置this->line2 = new QLineEdit(""); //实例化对象,设置文本this->line2->setParent(this);             //设置父对象line2->setPlaceholderText("请输入你的密码");   //设置提示性文本this->line2->resize(200,30);              //设置大小this->line2->move(label2->x()+label2->width()+50,label2->y());  //设置位置this->line2->setAlignment(Qt::AlignCenter);         //文本居中this->line2->setStyleSheet("background-color:lightred;color:darkgreen;");   //设置颜色(背景和字体)line2->setEchoMode(QLineEdit::Password);        //密文设置(输入密码以黑点代替)//btn1确认按钮设置btn1 = new QPushButton("确认",this);  //实例化对象,设置文本,设置父对象btn1->resize(50,30);        //设置大小btn1->move(label2->x()+50,label2->y()+100); //设置位置btn1->setStyleSheet("background-color: red; color: white;");    //颜色设置//btn2取消按钮设置btn2 = new QPushButton("取消"); //实例化对象,设置文本btn2->setParent(this);          //设置父对象btn2->resize(50,30);            //设置大小btn2->move(btn2->x()+btn2->width()+180,btn1->y());     //设置位置btn2->setStyleSheet("background-color: red; color: white;");    //颜色设置//勾选确认按钮设置my_che1 = new QCheckBox("我同意本条款",this); //实例化对象,设置文本,设置父对象my_che1->move(100,500);//勾选确认按钮连接槽函数my_che1hhconnect(my_che1,&QCheckBox::stateChanged,this,&Widget::my_che1hh); // 勾选框状态变化//连接点击按钮1的信号到槽函数1connect(btn1,&QPushButton::clicked,this,&Widget::myslots1_verify);//连接点击按钮2的信号到槽函数2connect(btn2,&QPushButton::clicked,this,&Widget::myslots2_verify);
}void Widget::my_che1hh(int state)
{if(state == Qt::Checked)   // 如果勾选框被选中,启用登录按钮{btn1->setEnabled(true);     //按钮启用函数}else        // 如果勾选框未选中,禁用登录按钮{btn1->setEnabled(false);}
}#if 1void Widget::myslots1_verify()     //槽函数,确认按钮点击后的响应
{QString text1 = line1->text();  //获取输入框1文本,文本也可以直接使用,如下QString text2 = line2->text();  //获取输入框2文本if(!my_che1->isChecked()){QMessageBox::warning(this,"登陆失败","请先同意条款!",QMessageBox::Ok);return ; 如果未选中,直接返回,不执行后续登录逻辑}// 检查输入框是否为空if (text1.isEmpty() || text2.isEmpty()){QMessageBox::warning(this, "登录失败", "账号或密码不能为空!", QMessageBox::Ok);return; // 如果输入框为空,直接返回}if(text1 == "1111"&&line2->text()=="1111"){btn1->setStyleSheet("background-color: white; color: red;");    //颜色设置QTimer::singleShot(200,this,&Widget::color_1);         //设置定时器,时间过后恢复原来的颜色// 弹出信息对话框int res1 = QMessageBox::information(this,"登录成功","登录成功!!",QMessageBox::Ok);if(res1 == QMessageBox::Ok){emit mysignal_1();   //发射一个信号用于其他槽函数操作(登陆成功),静态成员函数版本}this->close();      //关闭登录窗口}else{//登录失败,弹出问题对话 ,静态成员函数版本int res = QMessageBox::warning(this,"登录失败","账户和密码错误,是否重新输入?",QMessageBox::Yes|      //确认按钮QMessageBox::No);      //取消按钮if(res == QMessageBox::Yes){line2->clear();         //密码不匹配则清空密码}else{close();        //关闭当前窗口,包括登录窗口}}
}
#endif#if 1
//基于属性版本
void Widget::myslots2_verify()  // 点击取消按钮的槽函数应答
{emit mysignal_2();       // 发射一个信号用于其他槽函数操作// 创建一个QMessageBox对象,设置其父窗口为当前Widget窗口QMessageBox msgBox(this);// 设置消息框的图标为Question类型,通常用于询问用户msgBox.setIcon(QMessageBox::Question);// 设置消息框的主文本,即标题msgBox.setText("退出登录");// 设置消息框的附加文本,提供更多信息msgBox.setInformativeText("确定要退出吗,不再聊会吗?");// 设置消息框的标准按钮,包括Yes和No按钮msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No);// 设置默认按钮为No,这样用户按下回车键时不会退出msgBox.setDefaultButton(QMessageBox::No);// 设置消息框的模态性为WindowModal,这样用户必须响应消息框才能继续msgBox.setWindowModality(Qt::WindowModal);// 显示消息框并获取用户选择,exec()方法会阻塞当前线程直到消息框关闭int resultme = msgBox.exec(); // 显示消息框并获取用户选择// 检查用户是否点击了Yes按钮if(resultme == QMessageBox::Yes){close();        // 如果用户点击Yes,则关闭当前界面}// 如果用户点击No,则不需要任何操作,因为消息框会自动关闭,并且不会执行close()方法
}#endif#if 0
//静态成员函数版本
void Widget::myslots2_verify()  //点击取消按钮的槽函数应答
{emit mysignal_2();       //发射一个信号用于其他槽函数操作int resultme = QMessageBox::question(this,"退出登录","确定要退出吗,不再聊会吗?",QMessageBox::Yes|QMessageBox::No);if(resultme==QMessageBox::Yes){close();        //关闭当前界面}//如果用户点击No,则不需要任何操作,直接执行下一步,关闭当前界面this->close();
}
#endif
void Widget::color_1()
{btn1->setStyleSheet("background-color: red; color: white;");    //颜色设置
}Widget::~Widget()
{
}
#if 0
void Widget::myslots1_verify() {// 获取输入框1的文本内容QString text1 = line1->text();// 比较输入框1和输入框2的文本内容if (text1 == line2->text()) {// 如果文本内容匹配,设置按钮的样式表btn1->setStyleSheet("background-color: white; color: red;");// 使用 QTimer::singleShot 设置一个定时器,200 毫秒后调用 color_1 槽函数// 用于恢复按钮的原始颜色QTimer::singleShot(200, this, &Widget::color_1);// 弹出信息对话框,提示登录成功QMessageBox::information(this, "登录成功", "登录成功!!", QMessageBox::Ok);// 发射一个信号 mysignal_1,用于通知其他部分登录成功emit mysignal_1();// 关闭当前窗口this->close();} else {// 如果文本内容不匹配,清空密码输入框(line2)line2->clear();// 弹出错误提示对话框QMessageBox::warning(this, "登录失败", "账号或密码错误,请重试!", QMessageBox::Ok);}
}#endif

效果展示

没有勾选则无法点击确认键

输入错误账户或密码(之后点击yes就关闭弹窗,登录界面不会关闭,可以继续登录,no就关闭弹窗并关闭登陆界面)

点击取消按钮(之后点击yes就关闭界面,no就关闭弹窗,登录界面不会关闭,可以继续登录)

登录成功

点击ok后跳转第二界面

思维导图

刷题记录

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

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

相关文章

腾讯云AI代码助手评测:如何智能高效完成Go语言Web项目开发

腾讯云AI代码助手评测&#xff1a;如何智能高效完成Go语言Web项目开发 ?? 文章目录 腾讯云AI代码助手评测&#xff1a;如何智能高效完成Go语言Web项目开发 ?? 背景引言开发环境介绍腾讯云AI代码助手使用实例 1. 代码补全2. 技术对话3. 代码优化4. 规范代码5. Bug处理 获得…

STM32 CUBE Can调试

STM32 CUBE Can调试 1、CAN配置2、时钟配置3、手动添加4、回调函数5、启动函数和发送函数6、使用方法(采用消息队列来做缓存)7、数据不多在发送函数中获取空邮箱发送&#xff0c;否则循环等待空邮箱 1、CAN配置 2、时钟配置 3、手动添加 需要注意的是STM32CUBE配置的代码需要再…

【大数据技术】搭建完全分布式高可用大数据集群(Kafka)

搭建完全分布式高可用大数据集群(Kafka) kafka_2.13-3.9.0.tgz注:请在阅读本篇文章前,将以上资源下载下来。 写在前面 本文主要介绍搭建完全分布式高可用集群 Kafka 的详细步骤。 注意: 统一约定将软件安装包存放于虚拟机的/software目录下,软件安装至/opt目录下。 安…

如何使用deepseek创建钉钉收费AI助理

1、打开deepseek&#xff0c;简单描述下自己的问题&#xff0c;勾选深度思考 2、deepseek给我生成了一大段提示词模板 3、打开钉钉-应用中心-找AI助理 4、点击立即创作 5、创作 默认创建的是免费上网&#xff0c;需要创建收费的话需要先申请&#xff0c;填一个表单内容和价格&…

DeepSeek RAGFlow构建本地知识库系统

学习目标 DeepSeek RAGFlow 构建本地知识库系统 学习内容 下载安装Docker 1.1 Docker 是什么 1.2 下载Docker 1.3 安装Docker配置DockerRAGFlow 配置 3.1 下载RAGFlow 3.2 RAGFlow配置 3.3 启动RAGFlow Docker新建知识库 4.1 查看本机IP 4.2 OLLAMA_HOST 变量配置 4.3 添加模…

unity学习31:Video Player 视频播放相关基础

目录 1 新增Video Player的 component 2 导入视频到Asset里 3 拖入到 video player的 video clip里去即可 4 渲染模式 4.1 多种渲染模式 4.2 如果选择 Render Texture模式 4.3 然后把Render Texture 拖到游戏里的 gameObject上面 5 在UI上显示 5.1 创建UI 5.2 在UI上…

机器学习 - 需要了解的条件概率、高斯分布、似然函数

似然函数是连接数据与参数的桥梁&#xff0c;通过“数据反推参数”的逆向思维&#xff0c;成为统计推断的核心工具。理解它的关键在于区分“参数固定时数据的概率”与“数据固定时参数的合理性”&#xff0c;这种视角转换是掌握现代统计学和机器学习的基础。 一、在学习似然函…

使用Docker + Ollama在Ubuntu中部署deepseek

1、安装docker 这里建议用docker来部署&#xff0c;方便简单 安装教程需要自己找详细的&#xff0c;会用到跳过 如果你没有安装 Docker&#xff0c;可以按照以下步骤安装&#xff1a; sudo apt update sudo apt install apt-transport-https ca-certificates curl software-p…

导航守卫router.beforeEach

router.beforeEach 是一个全局前置守卫&#xff0c;在每次路由跳转之前都会触发。 //index.jsrouter.beforeEach((to, from, next) > {// 打印即将要进入的目标路由信息console.log(即将要进入的目标路由信息:, to)// 打印当前正要离开的路由信息console.log(当前正要离开的…

【Golang学习之旅】Go + Redis 的缓存设计与优化

文章目录 前言1. Go与Redis的简介1.1 什么是Redis&#xff1f;1.2 为什么选择Redis&#xff1f; 2. Redis安装于配置2.1 安装Redis2.2 配置Redis 3. Go中使用Redis的基本操作3.1 连接Redis3.2 设置缓存3.3 删除缓存 4. 缓存设计与优化4.1 缓存的粒度设计4.2 缓存失效策略4.3 缓…

【STM32系列】利用MATLAB配合ARM-DSP库设计IIR数字滤波器(保姆级教程)

ps.源码放在最后面 设计FIR数字滤波器可以看这里&#xff1a;利用MATLAB配合ARM-DSP库设计FIR数字滤波器&#xff08;保姆级教程&#xff09; 设计IIR滤波器 MATLAB配置 设计步骤 首先在命令行窗口输入"filterDesigner"&#xff0c;接着就会跳出以下界面&#xf…

迁移学习 Transfer Learning

迁移学习&#xff08;Transfer Learning&#xff09;是什么&#xff1f; 迁移学习是一种机器学习方法&#xff0c;它的核心思想是利用已有模型的知识来帮助新的任务或数据集进行学习&#xff0c;从而减少训练数据的需求、加快训练速度&#xff0c;并提升模型性能。 &#x1f…

25/2/8 <机器人基础> 阻抗控制

1. 什么是阻抗控制&#xff1f; 阻抗控制旨在通过调节机器人与环境的相互作用&#xff0c;控制其动态行为。阻抗可以理解为一个力和位移之间的关系&#xff0c;涉及力、速度和位置的协同控制。 2. 阻抗控制的基本概念 力控制&#xff1a;根据感测的外力调节机械手的动作。位置…

【CubeMX+STM32】SD卡 文件系统读写 FatFs+SDIO+DMA

本篇&#xff0c;将使用CubeMXKeil&#xff0c;创建一个SD卡的 FatFSSDIODMA 文件系统读写工程。 目录 一、简述 二、CubeMX 配置 FatFSSDIO DMA 三、Keil 编辑代码 四、实验效果 实现效果&#xff0c;如下图&#xff1a; 一、简述 上两篇&#xff0c;已循序渐进讲解了SD、…

docker环境下部署face-search开源人脸识别模型

由于我们是直接将face-search部署在docker容器中的,所以,在部署之前一定要检查一下自己的docker环境,要不然部署过程中会出现各种各样的问题 我这里的docker环境是 一、安装docker环境 如果docker版本比较低或者docker-compose的版本比较低的情况下,部署的时候docker的yml…

【Android开发AI实战】选择目标跟踪基于opencv实现——运动跟踪

文章目录 【Android 开发 AI 实战】选择目标跟踪基于 opencv 实现 —— 运动跟踪一、引言二、Android 开发与 AI 的融合趋势三、OpenCV 简介四、运动跟踪原理&#xff08;一&#xff09;光流法&#xff08;二&#xff09;卡尔曼滤波&#xff08;三&#xff09;粒子滤波 五、基于…

消费电子产品中的噪声对TPS54202的影响

本文章是笔者整理的备忘笔记。希望在帮助自己温习避免遗忘的同时&#xff0c;也能帮助其他需要参考的朋友。如有谬误&#xff0c;欢迎大家进行指正。 一、概述 在白色家电领域&#xff0c;降压转换器的应用非常广泛&#xff0c;为了实现不同的功能就需要不同的电源轨。TPS542…

5、大模型的记忆与缓存

文章目录 本节内容介绍记忆Mem0使用 mem0 实现长期记忆 缓存LangChain 中的缓存语义缓存 本节内容介绍 本节主要介绍大模型的缓存思路&#xff0c;通过使用常见的缓存技术&#xff0c;降低大模型的回复速度&#xff0c;下面介绍的是使用redis和mem0&#xff0c;当然redis的语义…

继承QLineEdit类实现自动补全功能

QlineEdit类本身是没有自动补全功能的&#xff0c;可以使用QCompleter配合实现功能。 但是在开发过程中发现&#xff0c;输入的字符串如果匹配那么QCompleter类会弹窗显示匹配项&#xff0c;如果输入的字符串不匹配则QCompleter类会关闭弹出(这点我也倒是能理解&#xff0c;没有…

【课程设计参考】迷宫小游戏 :基于 Python+Pygame+AI算法

一、内容 实现走迷宫 &#xff08;1&#xff09;游戏界面显示&#xff1a;迷宫地图、上下左右移动的特效。 &#xff08;2&#xff09;动作选择&#xff1a;上下左右键对应于上下左右的移动功能&#xff0c;遇到障碍的处理。 &#xff08;3&#xff09;得分统计功能&#xff…