当前位置: 首页 > news >正文

day49:QT day2,信号与槽、对话框

一、完善登录框

点击登录按钮后,判断账号(admin)和密码(123456)是否一致,如果匹配失败,则弹出错误对话框,文本内容“账号密码不匹配,是否重新登录”,给定两个按钮ok和cancel,点击ok后,会清除密码框中的内容,继续进行登录;如果点击cancel按钮,则关闭界面。

如果账号和密码匹配,则弹出信息对话框,给出提示信息为“登录成功”,给出一个按钮ok,点击ok后,关闭整个登录界面,跳转到其他界面

点击取消按钮后,弹出问题对话框,询问是否确定要退出登录,给出两个按钮,yes|no,点击yes,则直接关闭整个登录界面,如果点击no则进行进行登录

要求:消息对话框,对象版和静态成员函数版至少各实现一个

第二个界面,second.h:

#ifndef SECOND_H
#define SECOND_H#include <QWidget>namespace Ui {
class Second;
}class Second : public QWidget
{Q_OBJECTpublic:explicit Second(QWidget *parent = nullptr);~Second();public slots:void jump_slot();   //跳转槽,用来接收从widget发送的信号private:Ui::Second *ui;
};#endif // SECOND_H

第二个界面,second.cpp:

#include "second.h"
#include "ui_second.h"Second::Second(QWidget *parent) :QWidget(parent),ui(new Ui::Second)
{ui->setupUi(this);
}Second::~Second()
{delete ui;
}void Second::jump_slot()
{//如果接收到信号,弹出消息框this->show();
}

widget.h:

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <QPushButton>
#include <QLineEdit>
#include <QLabel>
#include <QMessageBox>
#include "second.h"class Widget : public QWidget
{Q_OBJECTprivate:QLabel *lab1;   //背景QLabel *lab2;   //用户图标QLabel *lab3;   //密码图标QLineEdit *edit1;   //用户名/手机/邮箱QLineEdit *edit2;   //密码QPushButton *btn1;  //登录QPushButton *btn2;  //退出QMessageBox errbox; //错误对话框定义Second* s1;     //第二个界面定义
signals:void jump();    //发送信号与第二个界面second槽反应public slots:void login_slot();  //登录按钮点击事件接收槽void cancel_slot();  //取消按钮点击事件接受槽public:Widget(QWidget *parent = nullptr);~Widget();
};
#endif // WIDGET_H

widget.cpp:

#include "widget.h"Widget::Widget(QWidget *parent): QWidget(parent)
{this->setFixedSize(500,500);this->setWindowTitle("hqyj login...");this->setWindowIcon(QIcon("D:\\qianrushi\\icon\\wodepeizhenshi.png"));//实例化一个标签,给定初始文本内容并指定父组件lab1=new QLabel(this);lab1->resize(500,200);lab1->move(0,0);lab1->setPixmap(QPixmap("D:\\qianrushi\\icon\\logo.png"));lab1->setScaledContents(true);//lab1->setGeometry(0,0,500,200);lab2=new QLabel(this);lab2->resize(30,30);lab2->move(80,250);lab2->setPixmap(QPixmap("D:\\qianrushi\\icon\\userName.jpg"));lab2->setScaledContents(true);edit1=new QLineEdit(this);edit1->setGeometry(lab2->x()+50,lab2->y()-10,300,50);edit1->setPlaceholderText("hqyj账号/手机/邮箱");lab3=new QLabel(this);lab3->setPixmap(QPixmap("D:\\qianrushi\\icon\\passwd.jpg"));lab3->setGeometry(lab2->x(),lab2->y()+50,30,30);lab3->setScaledContents(true);edit2=new QLineEdit(this);edit2->setGeometry(lab3->x()+50,lab3->y()-10,300,50);edit2->setPlaceholderText("密码");edit2->setEchoMode(QLineEdit::Password);btn1=new QPushButton(QIcon("D:\\qianrushi\\icon\\login.png"),"登录",this);btn1->resize(100,40);btn1->move(lab3->x()+100,lab3->y()+80);btn2=new QPushButton(QIcon("D:\\qianrushi\\icon\\cancel.png"),"退出",this);btn2->resize(100,40);btn2->move(btn1->x()+150,btn1->y());//给第二个界面申请空间s1 = new Second;//连接弹窗的信号与槽connect(this,&Widget::jump,s1,&Second::jump_slot);//连接登录的信号与槽connect(btn1,&QPushButton::clicked,this,&Widget::login_slot);//连接取消的信号与槽connect(btn2,&QPushButton::clicked,this,&Widget::cancel_slot);
}Widget::~Widget()
{
}void Widget::login_slot()
{if(edit1->text()!="admin" || edit2->text()!="123456"){//登录失败,弹出错误对话框errbox.setText("账号密码不匹配,是否重新登录");errbox.setWindowTitle("错误对话框");errbox.setStandardButtons(QMessageBox::Yes | QMessageBox::Cancel);errbox.setDefaultButton(QMessageBox::Yes);int ret1=errbox.exec();if(ret1==QMessageBox::Yes){//同意,隐藏错误对话框,清空账号密码errbox.hide();edit1->clear();edit2->clear();}else if(ret1==QMessageBox::Cancel){//取消,关闭错误对话框errbox.close();}}else{int ret2=QMessageBox::information(this,"信息对话框","登录成功",QMessageBox::Ok|QMessageBox::Cancel,QMessageBox::Ok);if(ret2 == QMessageBox::Ok){//同意登录,跳转this->close();emit jump();}else if(ret2 == QMessageBox::Cancel){QMessageBox quesbox(QMessageBox::Question,"问题对话框","确定退出?",QMessageBox::Yes|QMessageBox::No,this);//取消,弹出问题对话框int ret3=quesbox.exec();if(ret3 == QMessageBox::Yes){//同意退出,退出程序quesbox.close();this->close();}else if(ret3 == QMessageBox::No){//取消,继续登录quesbox.hide();}}}
}void Widget::cancel_slot()
{//取消,退出程序this->close();
}

main.cpp:

#include "widget.h"#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);Widget w;w.show();return a.exec();
}

二、思维导图:有道云笔记

http://www.lryc.cn/news/169545.html

相关文章:

  • Meta分析核心技术
  • Gof23设计模式之责任链模式
  • 数字孪生和元宇宙:打造未来的数字边界
  • 【新版】系统架构设计师 - 软件架构设计<新版>
  • Linux面试题
  • NODEJS版本管理工具
  • 【个人笔记本】本地化部署 类chatgpt模型 详细流程
  • RFID与人工智能怎么融合,RFID与人工智能融合的应用
  • 性能测试 —— Jmeter 常用三种定时器
  • 每个高级前端工程师都应该知道的前端布局
  • 100道基于Android毕业设计的选题题目,持续更新
  • idea显示git分支信息(GitToolBox插件)
  • Hadoop知识点之Hadoop发展历程
  • 阿里云无影电脑:免费体验无影云电脑3个月
  • 菜鸟教程《Python 3 教程》笔记(20):面向对象
  • vue2编辑markdown
  • PCB走线规则
  • webpack静态资源上传到CDNS (阿里云 OSS,亚马逊 AWS S3,七牛云 Qiniu Cloud Kodo)webpack-plugin-cdns
  • python 异常
  • stm32--独立看门狗
  • vue3中css使用script中定义的变量
  • Ubuntu 22.04 安装配置 flatpak
  • oracle创建数据库以及用户,并导入dmp格式数据
  • [deeplearning]pytorch实现softmax多分类问题预测训练
  • 【C++初阶】动态内存管理
  • Mac电脑安装Zulu Open JDK 8 使用 spring-kafka 消费不到Kafka Partition中的消息
  • CodeArts Check代码检查服务用户声音反馈集锦(2)
  • 红帽RHCE9.0学什么内容,新版有什么变化
  • 线性代数的本质(一)——向量空间
  • PP-Tracking之C++部署