Day3 Qt

news2025/1/15 20:46:42

作业

1.

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

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

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

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

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

//my_widget.cpp

#include "my_widget.h"
#include "ui_my_widget.h"

My_Widget::My_Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::My_Widget)
{
    ui->setupUi(this);
    //窗口的相关设置
    //    this -> resize(800,500);
    this -> setWindowTitle("QQ聊天"); //设置窗口标题
    this -> setWindowIcon(QIcon(":/pictrue/pictrue/qq.png"));//设置窗口图标

    //标签相关设置
    ui-> logoLab ->setPixmap(QPixmap(":/pictrue/pictrue/logo.png"));//设置登录界面主图
    ui -> logoLab -> setScaledContents(true);//主图自适应标签大小

    //账号和密码
    ui -> userNameLab -> resize(40,40);//设置账户标签图标大小
    ui -> userNameLab -> setPixmap(QPixmap(":/pictrue/pictrue/wodepeizhenshi.png"));//设置账户标签图标
    ui -> userNameLab -> setScaledContents(true);//设置账户标签图标自适应标签大小

    ui -> passwdLab -> resize(40,40);//设置密码标签大小
    ui -> passwdLab ->setPixmap(QPixmap(":/pictrue/pictrue/passwd.jpg"));//设置密码标签图标
    ui -> passwdLab ->setScaledContents(true);//设置密码标签图标自适应标签大小

    //账号密码输入
    ui -> usrEdit ->setPlaceholderText("QQ账号/手机号码/QQ邮箱");//在账户输入行编译器上设置隐性输入提示
    ui -> passwdEdit -> setPlaceholderText("请输入密码");//在密码输入行编译器上设置隐性输入提示
    ui -> passwdEdit -> setEchoMode(QLineEdit::Password);//将密码行编译器设置为不可见属性防止密码泄露

    //登录按钮
    ui -> btn1 ->setIcon(QIcon(":/pictrue/pictrue/login.png"));//登录按钮设置添加图片
    ui -> btn2 ->setIcon(QIcon(":/pictrue/pictrue/cancel.png"));//取消登录按钮设置添加图片

    connect(ui ->btn1,&QPushButton::clicked,this,&My_Widget::btn1_slot);//信号触发函数,按下登录按钮,当登录成功则响应相应槽函数,判断账号是否输入正确

    //   connect(ui->btn2,SIGNAL(clicked()),this,SLOT(my_slot()));




}

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

void My_Widget::my_slot() //QT4版本 槽函数
{
    this ->close();//当前界面关闭
}
void My_Widget:: btn1_slot() //qt5版本信号与槽函数连接,自定义
{
    QString s = ui ->usrEdit->text();//存入输入的数据
    QString v = ui ->passwdEdit->text();//存入输入的数据

    //判断账号密码输入正确
    if(s=="admin"&&v=="123456")
    {
        qDebug() << "登录成功";//终端输出登录成功
        //跳转另一个窗口
        int res=QMessageBox::information(this,"登录成功",                  //调用静态消息对话框
                                             "密码正确,请进入聊天界面",      //参数内容书写
                                             QMessageBox::Ok);            //参数判断是否ok 返回ok
            if(res==QMessageBox::Ok) //判断选择按下按钮ok
            {
              emit Jump(); //则进行跳转界面,先发送跳转信号,通过跳转信号链接第二窗口的show函数
            }
        this->close();//跳转是将当前登录界面关闭
    }
    else
    {
        //============基于属性版本==============
//        QMessageBox msg(                                //调用属性消息对话框
//                    QMessageBox::Critical,                //输出提示错误信息
//                    "错误",
//                    "账号和密码不匹配,是否重新登录",
//                    QMessageBox::Yes | QMessageBox::No);  //判断按下确认还是否定
//        int ret=msg.exec();  属性消息设置成功编译执行弹出后返回一个确认键值
//        if(ret==QMessageBox::Yes) //判断是否按下确认键
//        {
//            ui ->usrEdit->clear();  //按下yes则清空账户行编译器内容重新输入账号
//            ui->passwdEdit -> clear();//按下yes则清空密码行编译器内容重新输入密码
//            qDebug()<<"请重新登录"; //终端输出重新登入
//        }
//        else  //若按下No键,则进行退出登录
//        {
//           this->close();//退出当前登录界面
//        }
//    }
     //============基于属性版本==============
    //============基于静态成员函数版本==============
   int res=QMessageBox::critical(this,"输入错误",                          //调用静态成员函数错误输出信息框
                                    "账号和密码不匹配,是否重新登录",          // 函数内部具体实参
                                    QMessageBox::Yes | QMessageBox::No);     //写入消息框按键有哪几个
   if(res==QMessageBox::Yes)  //如果返回值按下的是YES
   {
       ui ->usrEdit->clear();  //清空账号信息
       ui->passwdEdit -> clear(); //清空密码信息
   }
   else
   {
       this->close(); //否则按下NO,关闭当前登录界面
   }
    //============基于静态成员函数版本==============
}

}
void My_Widget::on_btn2_clicked()  //取消键被按下,执行弹出消息框
{
     //============基于属性版本==============
//    QMessageBox msg1(
//                QMessageBox::Information,
//                "取消登录",
//                "请问您是否需要取消登录",
//                QMessageBox::Yes | QMessageBox::No);
//    int ret=msg1.exec();
//    if(ret==QMessageBox::Yes)
//    {
//        this->close();
//    }
//    else
//    {
//        ui ->usrEdit->clear();
//        ui->passwdEdit -> clear();
//        qDebug()<<"请重新登录";
//    }
     //============基于属性版本==============

     //============基于静态成员函数版本==============
    int res=QMessageBox::information(this,"取消登录",
                                     "请问您是否需要取消登录",
                                     QMessageBox::Yes | QMessageBox::No);
    if(res==QMessageBox::Yes)  //若按下YES,则取消登录关闭登录页
    {
        this->close();
    }
    else //按下NO,则不取消登录
    {
        ui ->usrEdit->clear();
        ui->passwdEdit -> clear(); //清空输入端,终端输入提示信息请重新登录
        qDebug()<<"请重新登录";
    }
     //============基于静态成员函数版本==============

}
//my_widget.h

#ifndef MY_WIDGET_H
#define MY_WIDGET_H
#include <QMessageBox>
#include <QWidget>
#include <QIcon>
#include <QPixmap>
#include<QLineEdit>
#include <QPushButton>
#include<QDebug>
QT_BEGIN_NAMESPACE
namespace Ui { class My_Widget; }
QT_END_NAMESPACE

class My_Widget : public QWidget
{
    Q_OBJECT

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

public slots:
    void btn1_slot();
void my_slot();

signals:
 void Jump();

private slots:
void on_btn2_clicked();

private:
    Ui::My_Widget *ui;
};
#endif // MY_WIDGET_H
//main.cpp
#include "my_widget.h"
#include "second.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    My_Widget w;
    w.show();
    Second s;
   QObject ::connect(&w,&My_Widget::Jump,&s,&Second::Jump_slot);//调用caonnect函数,第一个登录窗口成功后进入新的对话框
    return a.exec();
}

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

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

相关文章

经典算法试题(一)

文章目录 一、19头牛1、题目2、思路讲解3、代码实现4、结果 二、分钱1、题目2、思路讲解3、代码实现4、结果 三、儿子做题1、题目2、思路讲解3、代码实现4、结果 四、乐队人数1、题目2、思路讲解3、代码实现4、结果 五、靶子趣谈1、题目2、思路讲解3、代码实现4、结果 六、里程…

外骨骼机器人和人形机器人概览

前言&#xff1a;一点思考 外骨骼机器人和人形机器人都曾随着一些爆品的出现火热过一段时间&#xff0c;但总感觉当前技术条件还不成熟&#xff0c;真正能落地的应用场景不多。马斯克在擎天柱发布会上被问到人形机器人的落地与前景问题时并没有给出明确答案&#xff0c;只是用…

《Selenium 2 自动化测试实战》读书笔记

背景 最近在弄 appium&#xff0c;然后顺便发现了 Selenium 框架和这本书&#xff0c;恰好这本书也介绍了一些软件测试 & 自动化测试的理论知识&#xff0c;遂拿过来学习学习。所以本文几乎没有实践内容&#xff0c;大多都是概念和工具的 mark&#xff0c;后续若有实践&am…

bulldog 靶机

bulldog 信息搜集 存活检测 详细扫描 后台网页扫描 网页信息搜集 正在开发的如果你正在读这篇文章&#xff0c;你很可能是Bulldog Industries的承包商。恭喜你!我是你们的新老板&#xff0c;组长艾伦布鲁克。CEO解雇了整个开发团队和员工。因此&#xff0c;我们需要迅速招到一…

JVM(Java Virtual Machine)垃圾收集算法篇

前言 本文参考《深入理解Java虚拟机》&#xff0c;主要介绍GC相关的算法&#xff0c;引用计数法、可达性分析算法、垃圾收集算法&#xff08;分代收集理论&#xff0c;标记-清除/整理/复制&#xff09; 本系列其他文章链接&#xff1a; JVM&#xff08;Java Virtual Machine&…

视频监控/安防监控平台EasyCVR新功能——视频播放id调阅来咯

TSINGSEE青犀视频监控汇聚平台EasyCVR可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及支持厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安防视频监控的能力&…

中小型企业云存储选型指南:要点与建议

随着信息技术的快速发展&#xff0c;中小型企业越来越依赖于云存储来管理和存储其日益增长的数据。选择适合自己企业的云存储解决方案是确保数据安全、提高工作效率的关键。 选型注意点&#xff1a; 选择适合自己企业的云存储方案 在选择适合自己企业的云存储方案时&#xff…

日志回滚工作原理剖析及在文件系统的作用

日志回滚原理 当涉及到崩溃恢复和一致性保护时&#xff0c;日志回滚是一种常见的机制。它通过记录写入操作到一个事务日志中&#xff0c;而不是直接应用到文件系统&#xff0c;以保护文件系统的一致性。下面是日志回滚的一般工作原理&#xff1a; 日志记录&#xff1a;在进行写…

【COMP305 LEC 1 2】

Part 1 Artificial Neural Networks(ANN) Topic 1 Historical/Biological Introduction 1. Biological Excitability (a. Virtually all living cells maintain an electrical potential difference between their interiors and the environment (exteriors) . 内部和外…

1812_参考spacemacs的文档拆解ivy layer的组成

全部学习汇总&#xff1a; GreyZhang/editors_skills: Summary for some common editor skills I used. (github.com) 升级了spacemacs的配置&#xff0c;之后重新翻了一下spacemacs的文档。看到了这里面的一个核心的结构layer。这样&#xff0c;结合文档并且找出一个layer来看…

【多线程】线程安全问题和解决方案

我们来看下面这一段代码 public class demo {public static void main(String[] args) throws InterruptedException {Cou count new Cou();Thread t1 new Thread(() -> {for (int i 0; i < 10000; i) {count.add();}});Thread t2 new Thread(() -> {for (int i …

王道计算机考研 操作系统学习笔记篇章二: 进程管理

目录 进程与线程 进程的概念 概念 进程的组成 PCB 程序段、数据段 进程的特征 总结 进程的状态与转换 进程的状态 创建态、就绪态 运行态 阻塞态 终止态 进程的转换 进程的组织 链接方式 索引方式 总结 进程控制 什么是进程控制 如何实现进程控制 进程控制相关的原…

Opencv之RANSAC算法用于直线拟合及特征点集匹配详解

Opencv之RANSAC算法用于直线拟合及特征点集匹配详解 讲述Ransac拟合与最小二乘在曲线拟合上的优缺点 讲述在进行特征点匹配时&#xff0c;最近邻匹配与Ransac匹配的不同之处 另外&#xff0c;Ransac也被用于椭圆拟合、变换矩阵求解等 1. 直线拟合 1.1 原理 RANSAC(RANdom …

两分钟搞懂UiAutomator自动化测试框架

1. UiAutomator简介 UiAutomator是谷歌在Android4.1版本发布时推出的一款用Java编写的UI测试框架&#xff0c;基于Accessibility服务。其最大的特点就是可以跨进程操作&#xff0c;可以使用UiAutomator框架提供的一些方便的API来对安卓应用进行一系列的自动化测试操作&#xf…

Linux程序调试器——gdb的使用

gdb的概述 GDB 全称“GNU symbolic debugger”&#xff0c;从名称上不难看出&#xff0c;它诞生于 GNU 计划&#xff08;同时诞生的还有 GCC、Emacs 等&#xff09;&#xff0c;是 Linux 下常用的程序调试器。发展至今&#xff0c;GDB 已经迭代了诸多个版本&#xff0c;当下的…

C#上位机序列9: 批量读写+事件广播+数据类型处理

一、源码结构&#xff1a; 二、运行效果&#xff1a; 三、源码解析 1. 读取配置文件及创建变量信息&#xff08;点位名称&#xff0c;地址&#xff0c;数据类型&#xff08;bool/short/int/float/long/double&#xff09;&#xff09; 2. 异步任务处理&#xff1a;读任务&…

c++_learning-并发与多线程

并发与多线程 并发&#xff1a;进程&#xff1a;线程&#xff1a;基本概念&#xff1a;线程安全&#xff1a;问题出现的场景&#xff1a;涉及的性质&#xff1a;如何保证线程安全&#xff1f; 并发的实现手段&#xff08;优先使用多线程并发&#xff09;&#xff1a;多进程并发…

【特征重要性揭秘:为什么同一个数据集会有不同结果】

文章目录 特征重要性概要为什么特征重要性分析很重要特征重要性分析方法内置特征重要性(coef_或feature_importances_)Leave-one-out相关性分析递归特征消除 Recursive Feature EliminationXGBoost特性重要性主成分分析 PCA方差分析 ANOVA卡方检验&#xff08;Chi-Square Test&…

求最大公约数的几种常见的方法 【详解】

目录 一、关于公约数 二、计算最大公约数的方法 1. 辗转相除法&#xff08;欧几里得算法&#xff09; 2. 更相减损法&#xff08;辗转相减法&#xff09; 3. 分解质因数法 4. 穷举法 5. 递归法 6. 短除法 三、总结 一、关于公约数 首先 &#xff0c;先介绍一下公约…

matplotlib python 画图教程(2)

1、bar 柱状图 import matplotlib.pyplot as plt import numpy as np n12 xnp.arange(12) y1(1-x/float(n))*np.random.uniform(0.5,1,n) y2(1-x/float(n))*np.random.uniform(0.5,1,n) plt.xlim(-.5,n) plt.ylim(-1.25,1.25) plt.xticks([]) plt.yticks([]) plt.bar(x,y1,fac…