QT_day3

news2024/11/20 9:43:22

完善对话框,点击登录对话框,如果账号和密码匹配,则弹出信息对话框,给出提示”登录成功“,提供一个Ok按钮,用户点击Ok后,关闭登录界面,跳转到新的界面中

如果账号和密码不匹配,弹出错误对话框,给出信息”账号和密码不匹配,是否重新登录“,并提供两个按钮Yes|No,用户点击Yes后,清除密码框中的内容,继续让用户进行登录,如果用户点击No按钮,则直接关闭登录界面

如果用户点击取消按钮,则弹出一个问题对话框,给出信息”您是否确定要退出登录?“,并给出两个按钮Yes|No,用户点击Yes后,关闭登录界面,用户点击No后,关闭对话框,继续执行登录功能

要求:基于属性版和基于静态成员函数版至少各用一个

要求:尽量每行代码都有注释


mywidget.h

#ifndef MYWIDGET_H
#define MYWIDGET_H

#include <QWidget>
#include <QPushButton>
#include <QDebug>
#include <QString>
#include <QMessageBox>

QT_BEGIN_NAMESPACE
namespace Ui { class MyWidget; }
QT_END_NAMESPACE

class MyWidget : public QWidget
{
    Q_OBJECT

public:
    MyWidget(QWidget *parent = nullptr);
    ~MyWidget();

public slots:       //表示该权限下都是公共的槽函数
    void  cancelBtn_slots();   //自定义一个槽函数
    void loginBtn_slot();

signals:
    void jump();  //自定义一个跳转信号


private:
    Ui::MyWidget *ui;
};
#endif // MYWIDGET_H

second.h

#ifndef SECOND_H
#define SECOND_H

#include <QWidget>

namespace Ui {
class Second;
}

class Second : public QWidget
{
    Q_OBJECT

public:
    explicit Second(QWidget *parent = nullptr);
    ~Second();

public slots:
    void jumpSlot();  //对应第一个窗口信号的槽函数声明

private:
    Ui::Second *ui;
};

#endif // SECOND_H

main.cpp

#include "mywidget.h"
#include "second.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MyWidget w;
    w.show();

    //实例化第二个窗口的对象
    Second s;

    //将第一个窗口的jump信号和第二窗口的jumpslot槽函数连接
    QObject::connect(&w,&MyWidget::jump,&s,&Second::jumpSlot);

    return a.exec();
}

mywidget.cpp

#include "mywidget.h"
#include "ui_mywidget.h"

MyWidget::MyWidget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::MyWidget)
{
    ui->setupUi(this);

    //窗口相关设置
    this->setWindowTitle("QQ聊天");
    this->setWindowIcon(QIcon(":/pictrue/qq.png"));
    this->setFixedSize(601,394);

    //logo设置
    ui->logoLab->setPixmap(QPixmap(":/pictrue/logo.png"));
    ui->logoLab->setScaledContents(true);

    //账号
    ui->userNameLab->resize(30,30);
    ui->userNameLab->setPixmap(QPixmap(":/pictrue/wodepeizhenshi.png"));
    ui->userNameLab->setScaledContents(true);

    ui->userNameEdit->setPlaceholderText("QQ账号/手机/邮箱");

    //密码
    ui->passwordLab->resize(30,30);
    ui->passwordLab->setPixmap(QPixmap(":/pictrue/passwd.jpg"));
    ui->passwordLab->setScaledContents(true);

    ui->passwordEdit->setEchoMode(QLineEdit::Password);

    //登录和取消
    ui->loginBtn->setIcon(QIcon(":/pictrue/login.png"));
    ui->cancelBtn->setIcon(QIcon(":/pictrue/cancel.png"));


    //手动连接信号和系统槽,基于qt4版本    是不友好的连接
    //取消   利用槽函数点击实现关闭
     this->connect(ui->cancelBtn,SIGNAL(clicked()),this,SLOT(cancelBtn_slots()));

     //手动连接信号和系统槽,基于qt5版本    是友好的连接
     connect(ui->loginBtn,&QPushButton::clicked,this,&MyWidget::loginBtn_slot);
}

MyWidget::~MyWidget()
{
    delete ui;
}



void MyWidget::cancelBtn_slots()
{
//    //用消息对话框   实例化一个对象  属性版
//    QMessageBox msg(
//                QMessageBox::Question,   //图标
//                "问题",   //标题
//                "您是否确定要退出登录?",   //文本
//                QMessageBox::Yes | QMessageBox::No,    //提供按钮
//                this);   //父对象
//    //用 exec() 执行对话框
//    int ret = msg.exec();

//    //对用户选中的按钮进行判断
//    if(ret == QMessageBox::Yes)
//    {
//        this->close();
//    }
//    else
//    {
//        msg.close();
//    }





    //用消息对话框  静态成员函数版
    int ret = QMessageBox::question(this,  //父对象
                                    "问题",   //标题
                                    "您是否确定要退出登录?",   //文本
                                    QMessageBox::Yes | QMessageBox::No);    //提供按钮
    //对用户选中的按钮进行判断
    if(ret == QMessageBox::Yes)
    {
        this->close();
    }
    else
    {
        return;
    }

}


void MyWidget::loginBtn_slot()
{

    if(ui->userNameEdit->text() == "admin" && ui->passwordEdit->text() == "123456")
    {
        //用消息对话框   实例化一个对象   属性版
//        QMessageBox msg(
//                    QMessageBox::Information,   //图标
//                    "提示",   //标题
//                    "登录成功",   //文本
//                    QMessageBox::Ok,    //提供按钮
//                    this);   //父对象
        //用 exec() 执行对话框
//        msg.exec();

        //用消息对话框  静态成员函数版
       QMessageBox::question(this,  //父对象
                             "提示",   //标题
                             "登录成功",   //文本
                             QMessageBox::Ok);   //提供按钮


        this->close();
        emit jump();

        qDebug("%s\n","登录成功");
        this->close();
    }
    else
    {
//        //用消息对话框   实例化一个对象   属性版
//            QMessageBox msg(
//                        QMessageBox::Critical,   //图标
//                        "错误",   //标题
//                        "账号和密码不匹配,是否重新登录",   //文本
//                        QMessageBox::Yes | QMessageBox::No,    //提供按钮
//                        this);   //父对象
//            //用 exec() 执行对话框
//           int ret = msg.exec();
//           //对用户选中的按钮进行判断
//          if(ret == QMessageBox::Yes)
//          {
//              ui->passwordEdit->clear();
//          }
//          else
//          {
//              this->close();
//          }




        //用消息对话框  静态成员函数版
        int ret = QMessageBox::critical(this,  //父对象
                                        "错误",   //标题
                                        "账号和密码不匹配,是否重新登录",   //文本
                                        QMessageBox::Yes | QMessageBox::No);    //提供按钮
        //对用户选中的按钮进行判断
        if(ret == QMessageBox::Yes)
        {
            ui->passwordEdit->clear();
        }
        else
        {
            this->close();
        }

        qDebug("%s\n","登录失败");

    }
}


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

思维导图

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

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

相关文章

科技资讯|2023全球智能手表预估出货1.3亿块,智能穿戴提升AI功能

根据集邦咨询公布的最新报告&#xff0c;受全球经济低迷影响&#xff0c;2023 年全球智能手表出货量预估为 1.3 亿块。苹果以超过 30% 的份额领先&#xff0c;其次是三星&#xff08;接近 10%&#xff09;、华为、Garmin、Fitbit 等。 报告认为苹果、三星和华为等主要智能手表…

智能新零售管理系统哪个好?亿发数字化收银系统提供商,可定制

在数字化时代的背景下&#xff0c;传统收银系统已经无法满足商家不断增加的业务需求。因此&#xff0c;出现了智能门店收银系统&#xff0c;该系统旨在为商家提供更加智能、高效的解决方案&#xff0c;满足商家的个性化需求&#xff0c;帮助中小型商家提高数字化运营能力。 1、…

运筹优化 | Python调用Gurobi求解线性规划 | 代码解析

需要求解的线性规划 from gurobipy import *定义了一个线性松弛问题&#xff0c;并用Gurobi求解 initial_LP Model(initial LP) # 定义变量initial_LP&#xff0c;调用Gurobi的Model&#xff0c;选择Initial Programming&#xff08;整数规划&#xff09;模型 x {} # 创建一个…

TCP/IP模型五层协议

TCP/IP模型五层协议 认识协议 约定双方进行的一种约定 协议分层 降低了学习和维护的成本&#xff08;封装&#xff09;灵活的针对这里的某一层协议进行替换 四/五层协议 五层协议的作用 应用层 应用层常见协议 应用层常见协议概览 基于TCP的协议 HTTP&#xff08;超…

【C++】命名空间和using namespace std的注意事项

&#x1f490; &#x1f338; &#x1f337; &#x1f340; &#x1f339; &#x1f33b; &#x1f33a; &#x1f341; &#x1f343; &#x1f342; &#x1f33f; &#x1f344;&#x1f35d; &#x1f35b; &#x1f364; &#x1f4c3;个人主页 &#xff1a;阿然成长日记 …

2022年下半年 软件设计师 上午试卷(22题—40题)

对高级语言源程序进行编译或解释的过程中需要进行语法分析&#xff0c;递归子程序分析属于 &#xff08;22&#xff09; 的分析法。 &#xff08;22&#xff09; A. 自上而下 B. 自下而上 C. 从左至右 D. 从右至左 注意字眼”递归“&#xff0c;自上而下的语法分析方法是一种自…

深入理解 Netty FastThreadLocal

作者&#xff1a;vivo 互联网服务器团队- Jiang Zhu 本文以线上诡异问题为切入点&#xff0c;通过对比JDK ThreadLocal和Netty FastThreadLocal实现逻辑以及优缺点&#xff0c;并深入解读源码&#xff0c;由浅入深理解Netty FastThreadLocal。 一、前言 最近在学习Netty相关的…

【C++面向对象】1. 类、对象

文章目录 【 1. 类 & 对象的定义 】1.1 类的定义1.2 对象的定义 【 2. 类的成员 】2.1 数据成员2.2 成员函数类的内部定义成员函数类的外部定义成员函数成员函数的访问实例 【 3. 类的访问修饰符 】3.1 public 公有成员3.2 private 私有成员3.3 protected 保护成员3.4 继承…

【Excel】WPS单元格快速转换表格字母大小写

使用WPS Office打开表格&#xff0c;选择需要处理的单元格或单元格区域。 依次点击「会员专享」选项卡 —>「智能工具箱」。 再点击「格式」—>「大小写」&#xff0c;选择一种大小写转换方式即可。

测试开发之自动化篇 —— 使用Selenium IDE录制脚本!

今天&#xff0c;我们开始介绍基于开源Selenium工具的Web网站自动化测试。 Selenium包含了3大组件&#xff0c;分别为&#xff1a;1. Selenium IDE 基于Chrome和Firefox扩展的集成开发环境&#xff0c;可以录制、回放和导出不同语言的测试脚本。 2. WebDriver 包括一组为不同…

AI智能视频监控系统解锁新场景:大型音乐节活动视频监控方案

随着近日音乐节的大火&#xff0c;越来越多的人喜欢参加音乐节进行放松娱乐。音乐节通常都会聚集大量人群&#xff0c;为了确保参与者的安全&#xff0c;在音乐节期间设置智能视频监控系统可以帮助管理人员及时发现和应对任何潜在危险或紧急情况&#xff0c;可以保障参与者的生…

重磅升级!官网全新改版上线啦~

新布局、新风格 新体验、新服务 棱镜七彩新版官网 正式上线啦&#xff01; 各版块功能全新升级 为广大用户提供更优质的服务体验&#xff01; 重构版块信息&#xff0c;用户需求一键直达 新官网结构大焕新&#xff0c;升级后的官网根据用户需求进行了更合理的设置与规划…

IJCAI2023【基于双曲空间探索的非独立同分布联邦学习】

1、介绍汇报的主题及汇报者 2、粗略介绍面临的挑战及出发点 3、介绍一下预备知识 4、解决方案 5、总览 6、实验设置 7、实验 8、结论

代码检查的方式有哪几种?

代码检查是软件开发过程中的关键环节&#xff0c;可以帮助发现和纠正潜在的错误和问题。以下是几种常见的代码检查方式&#xff1a; 1. 人工代码检查&#xff1a; 这是最基本和常见的方式&#xff0c;由开发人员手动检查代码。这种方式依赖于开发人员的经验和专业知识&#xf…

Linux远程管理协议

&#xff08;RFB、RDP、Telnet和SSH&#xff09;是Linux的远程管理协议。提到远程管理&#xff0c;通常指的是远程管理服务器&#xff0c;而非个人计算机。个人计算机可以随时拿来用&#xff0c;服务器通常放置在机房中&#xff0c;用户无法直接接触到服务器硬件&#xff0c;只…

JavaScript 操作浏览器和HTML文档/JavaScript 操作对象

JavaScript 操作浏览器和HTML文档 框架 浏览器对象模型&#xff08;BOM&#xff09; windownavigatorscreenlocation 文档对象模型&#xff08;DOM&#xff09; document 操作对象间的关系 window对象是浏览器的顶层对象&#xff0c;它包含了浏览器窗口的各种属性和方法。w…

数据库表设计及优化初步——项目中的数据库表究竟怎么设计?如何提高查询效率?

前言 我们都知道数据库设计有以下三大范式&#xff0c;但实际应用中真的是按照这三大范式来设计吗&#xff1f; 本篇博客尝试阐述项目中数据库表的设计&#xff0c;以及查询优化的方法。 第一范式&#xff1a; 原子&#xff0c;列信息不可再分&#xff1b; 第二范式&#…

培训机构招生电子传单制作教程:突出核心竞争力的方法

随着科技的不断发展&#xff0c;现在的招生宣传也变得越来越电子化。其中&#xff0c;电子传单就是一种非常有效的宣传方式。下面就让我们来学习如何制作具有吸引力的培训机构招生电子传单。 首先&#xff0c;我们需要进入乔拓云后台&#xff0c;并登录。在登录后&#xff0c;我…

Python武器库开发-基础篇(四)

基础篇(四) Open 文件 Python open() 方法用于打开一个文件&#xff0c;并返回文件对象。 在对文件进行处理过程都需要使用到这个函数&#xff0c;如果该文件无法被打开&#xff0c;会抛出 OSError。 注意&#xff1a;使用 open() 方法一定要保证关闭文件对象&#xff0c;即…

Simple RPC - 02 通用高性能序列化和反序列化设计与实现

文章目录 概述设计实现通用的序列化接口通用的序列化实现【推荐】 vs 专用的序列化实现专用序列化接口定义序列化实现 概述 网络传输和序列化这两部分的功能相对来说是非常通用并且独立的&#xff0c;在设计的时候&#xff0c;只要能做到比较好的抽象&#xff0c;这两部的实现…