华清远见嵌入式学习——QT——作业3

作业要求:

代码效果图:

登录成功并跳转页面

登录失败

关闭

代码:

第一页面头文件:

#ifndef LOGIN_H
#define LOGIN_H

#include <QWidget>
#include <QMessageBox>

QT_BEGIN_NAMESPACE
namespace Ui { class Login; }
QT_END_NAMESPACE

class Login : public QWidget
{
    Q_OBJECT

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

//自定义信号函数,用于跳转界面
signals:
    void my_jump();

//按钮点击信号对应的槽函数定义
private slots:
    void on_pushButton_clicked();    //登录按钮点击信号对应槽函数

    void on_closebtn_clicked();    //关闭按钮点击信号对应槽函数

private:
    Ui::Login *ui;
};
#endif // LOGIN_H

第一页面源文件:

#include "login.h"
#include "ui_login.h"

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

    this->setWindowFlag(Qt::FramelessWindowHint);//去掉窗口头部

    this->setAttribute(Qt::WA_TranslucentBackground);//去掉窗口其他部分

    this->setWindowIcon(QIcon(":/Logo/ka1.png"));  //设置窗口图标

}

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

//登录按钮点击信号对应的槽函数
void Login::on_pushButton_clicked()
{
    //当用户输入的账号密码正确时
    if(ui->Username->text() == "admin" && ui->Passwd->text() == "123456")
    {
        //采用静态成员函数版本,实现登录成功后的页面跳转和第一页面窗口的关闭
        int res = QMessageBox::information(this,"信息提示","登录成功");

        //如果用户登录成功后,且点击了消息对话框的OK按钮,则进行页面跳转和第一页面窗口的关闭
        if(res == QMessageBox::Ok)
        {
            emit my_jump();
            this->close();
        }

    }
    else  //当用户输入的账号密码错误时
    {
        //采用属性版本,实现登录失败后,密码栏的清空或第一页面的关闭
        QMessageBox err(QMessageBox::Critical,"错误","账号和密码不匹配,是否重新登录",QMessageBox::Yes|QMessageBox::No,this);

        //调用执行函数,显示对话框
        int ret = err.exec();

        //判断用户点击的是YES按钮还是NO按钮
        if(ret == QMessageBox::Yes)
        {
            //用户点击YES按钮,清空密码栏
            ui->Passwd->clear();
        }
        else if(ret == QMessageBox::No)
        {
            //用户点击NO按钮,关闭页面窗口
            this->close();
        }
    }
}

//关闭按钮点击信号对应的槽函数
void Login::on_closebtn_clicked()
{
    //采用静态成员函数版本,实现点击关闭按钮后,弹出问题对话框
    int res = QMessageBox::question(this,"问题","您是否确定要退出登录?");

    //判断用户是否点击了YES按钮
    if(res == QMessageBox::Yes)
    {
        //用户点击了YES按钮,关闭页面窗口
        this->close();
    }
}

第二页面头文件:

#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 jump_slot();

private:
    Ui::Second *ui;
};

#endif // SECOND_H

第二页面源文件:

#include "second.h"
#include "ui_second.h"

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

    //设置纯净窗口
    this->setWindowFlag(Qt::FramelessWindowHint);

    //去掉页面中不需要的地方
    this->setAttribute(Qt::WA_TranslucentBackground);
}

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

//第一页面的自定义信号的槽函数
void Second::jump_slot()
{
    //实现第二页面的展示
    this->show();
}

主函数文件:

#include "login.h"
#include "second.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    //第一个界面,用于登录,可以跳转至第二个界面
    Login w;
    w.show();

    //第二个界面,用于登录后的跳转显示
    Second s;

    //连接第一页面的跳转信号和第二页面的槽函数
    QObject::connect(&w,&Login::my_jump,&s,&Second::jump_slot);


    return a.exec();
}

第一UI界面样式表:

*{
	background-color: rgb(255, 255, 255);
}

QFrame#frame{
	/*border-image: url(:/Logo/Hose.jpg);*/
	border-image: url(:/Logo/wanXia.jpg);
	border-radius:20px;
}

#frame_2{
	background-color: rgba(209, 209, 209, 40);
	border-radius:20px;
}

QLabel#label{
	background-color: rgba(200, 200, 200, 80);  /*前三是RGB,最后一个是透明度*/
	border-radius:20px;
}
#label_2{
	background:transparent;  /*完全透明*/
	color: rgba(255, 255, 255, 210);
}
#label_3{
	background:transparent;  /*完全透明*/
	color: rgba(255, 255, 255, 210);
	
	font: 7pt "等线";
}


QLineEdit{
		background:transparent;  /*完全透明*/
		border:none;   /*没有边框*/
		border-bottom:1px solid rgba(255, 255, 255, 220);
		color: rgba(255, 255, 255, 220);
		font: 12pt "仿宋";
}

QPushButton#pushButton{
	border-radius:10px;
	
	background-color: qlineargradient(spread:pad, x1:0.084, y1:0.159091, x2:0.962737, y2:0.920136, stop:0.3 rgba(218, 115, 102, 255), stop:0.931579 rgba(213, 189, 77, 255));

	color: rgb(255, 255, 200);
	
	font: 12pt "仿宋";
}
#closebtn{
	border-radius:5px;
	
	background-color: qlineargradient(spread:pad, x1:0.084, y1:0.159091, x2:0.962737, y2:0.920136, stop:0.3 rgba(218, 115, 102, 255), stop:0.931579 rgba(213, 189, 77, 255));

	color: rgb(255, 255, 200);
	
	font: 12pt "仿宋";
}

QPushButton#pushButton:hover{  /*登录按钮鼠标移动*/
	border-radius:10px;
	
	background-color: qlineargradient(spread:pad, x1:0.084, y1:0.159091, x2:0.962737, y2:0.920136, stop:0.3 rgba(210, 100, 102, 255), stop:0.931579 rgba(210, 200, 77, 255));
	color: rgb(255, 255, 200);
	
	font: 12pt "仿宋";
}

QPushButton#pushButton:pressed{  /*登录按钮鼠标按下*/
	border-radius:10px;
	
	background-color: qlineargradient(spread:pad, x1:0.084, y1:0.159091, x2:0.962737, y2:0.920136, stop:0.3 rgba(218, 115, 102, 255), stop:0.931579 rgba(213, 189, 77, 255));
	color: rgb(255, 255, 200);
	
	padding-top:5px;
	padding-left:5px;

	font: 12pt "仿宋";
}

QPushButton#closebtn:hover{  /*关闭按钮鼠标移动*/
	border-radius:5px;
	
	background-color: qlineargradient(spread:pad, x1:0.084, y1:0.159091, x2:0.962737, y2:0.920136, stop:0.3 rgba(210, 100, 102, 255), stop:0.931579 rgba(210, 200, 77, 255));
	color: rgb(255, 255, 200);
	
	font: 8pt "仿宋";
}

QPushButton#clossebtn:pressed{  /*关闭鼠标按下*/
	border-radius:5px;
	
	background-color: qlineargradient(spread:pad, x1:0.084, y1:0.159091, x2:0.962737, y2:0.920136, stop:0.3 rgba(218, 115, 102, 255), stop:0.931579 rgba(213, 189, 77, 255));
	color: rgb(255, 255, 200);
	
	padding-top:4px;
	padding-left:4px;

	font: 8pt "仿宋";
}

第二UI界面样式表:

*{
	background-color: rgb(255, 255, 255);
}

QFrame#frame{
	border-image: url(:/Logo/hk.jpg);
}
#frame_2{
	background-color: rgba(221, 221, 221, 40);
}

QLabel{
	background:transparent;
	color: qlineargradient(spread:pad, x1:0, y1:0.432, x2:0.968421, y2:0.591, stop:0 rgba(163, 125, 209, 255), stop:1 rgba(255, 255, 255, 255));
	font: 16pt "仿宋";

}

思维导图:

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

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

相关文章

Hbase2.5.5分布式部署安装记录

文章目录 1 环境准备1.1 节点部署情况1.2 安装说明 2 Hbase安装过程Step1&#xff1a;Step2:Step3:Step4&#xff1a; 3 Web UI检查状态并测试3.1 Web UI3.2 创建测试命名空间 1 环境准备 1.1 节点部署情况 Hadoop11&#xff1a;Hadoop3.1.4 、 zookeeper3.4.6、jdk8 Hadoop1…

OpenCV | sift函数使用——得到特征点

scale invariant feature transform (sift) 图像尺度空间 在一定的范围内&#xff0c;无论物体是大还是小&#xff0c;人眼都可以分辨出来&#xff0c;然而计算机要有相同的能力却很难&#xff0c;所以要让机器能够对物体在不同尺度下有一个统一的认知&#xff0c; 就需要考虑…

分页设计(平时在表下面的栏框,有首页 | 上一页 | 下一页 | 尾页),下面代码带你实现

分页设计的本质就是&#xff0c;分页查询&#xff0c;就是SQL语句当中的(select * from ? limit ? , &#xff1f;&#xff09;,这里第一个&#xff1f;是所分页的那张表 &#xff0c;第二个&#xff1f;从哪条开始&#xff0c;第三个&#xff1f;是在页面上想让这张表出现几…

Linux系统vim,gcc,g++工具使用及环境配置,动静态库的概念及使用

Linux系统vim&#xff0c;gcc&#xff0c;g工具使用及环境配置&#xff0c;动静态库的概念及使用 1. Linux编辑器-vim的使用1.1 vim的基本概念1.2vim的基本操作1.3vim正常模式命令集1.4vim末端模式命令集1.5简单的vim配置 2.Linux编译器-gcc/g的使用2.1 准备阶段2.2gcc的使用2.…

Redis持久化机制 RDB 和 AOF 的选择

目录 一、Redis 的持久化 二、Redis 的持久化方式 Redis 提供了两种持久化的方式&#xff1a; RDB 介绍 RDB 的触发方式&#xff1a; AOF介绍 三、RDB 和 AOF 的选择 RDB 和 AOF 对比 1. 数据格式&#xff1a; 2. 恢复速度&#xff1a; 3. 数据丢失 4. 文件大小&…

这七款网工在线画拓扑工具,绝了!

你们好&#xff0c;我的网工朋友。 画拓扑图&#xff0c;绝对是网络工程师的基操。 上次给你来了篇手把手教你绘制拓扑图的好文&#xff0c;还没看过的先去看啊&#xff1a;《网络拓扑图怎么画最好&#xff1f;》。 关于画拓扑的工具&#xff0c;那就多了&#xff0c;直接用…

什么是 web 组态?web 组态与传统组态的区别是什么?

组态软件是一种用于控制和监控各种设备的软件&#xff0c;也是指在自动控制系统监控层一级的软件平台和开发环境。这类软件实际上也是一种通过灵活的组态方式&#xff0c;为用户提供快速构建工业自动控制系统监控功能的、通用层次的软件工具。通常用于工业控制&#xff0c;自动…

c++时间转换

获取当前时间字符串 std::string GetFormatTime() {time_t currentTime;time(&currentTime);tm* t_tm localtime(&currentTime);char formatTime[64] {0};snprintf(formatTime, 64, "%04d-%02d-%02d %02d:%02d:%02d", t_tm->tm_year 1900,t_tm->tm…

Python从入门到精通五:Python函数

函数介绍 学习目标&#xff1a; 快速体验函数的使用了解函数的作用 函数&#xff1a;是组织好的&#xff0c;可重复使用的&#xff0c;用来实现特定功能的代码段。 我们使用过的&#xff1a;input()、print()、str()、int()等都是Python的内置函数。 为什么要学习、使用函…

2023年团体程序设计天梯赛——总决赛题

F-L1-1 最好的文档 有一位软件工程师说过一句很有道理的话&#xff1a;“Good code is its own best documentation.”&#xff08;好代码本身就是最好的文档&#xff09;。本题就请你直接在屏幕上输出这句话。 输入格式&#xff1a; 本题没有输入。 输出格式&#xff1a; 在一…

使用 PyTorch FSDP 微调 Llama 2 70B

通过本文&#xff0c;你将了解如何使用 PyTorch FSDP 及相关最佳实践微调 Llama 2 70B。在此过程中&#xff0c;我们主要会用到 Hugging Face Transformers、Accelerate 和 TRL 库。我们还将展示如何在 SLURM 中使用 Accelerate。 完全分片数据并行 (Fully Sharded Data Paral…

java--集合基础

1.集合和数组的特点对比 集合类的特点 提供一种存储空间可变的存储模型&#xff0c;存储的数据容量可以发生改变 集合和数组的区别 共同点&#xff1a;都是存储数据的容器 不同点&#xff1a;数组的容量是固定的&#xff0c;集合的容量是可变的 2.ArrayList集合 ArrayLi…

解决 Element-ui中 表格(Table)使用 v-if 条件切换后,表格的列的筛选不显示了

解决方法 在每个需要使用 v-if 或 v-else 的 el-table-column 上增加 key 作为唯一标识&#xff0c;这样渲染的时候就不会因为复用原则导致列数据混乱了。关于key值&#xff0c;一般习惯使用字段名&#xff0c;也可随机生成一个值&#xff0c;只要具有唯一性就可以。

Centos7云服务器上安装cobalt_strike_4.7。附cobalt_strike_4.7安装包

环境这里是阿里的一台Centos7系统。 开始安装之前首先要确保自己安装了java11及以上环境。 安装java11步骤&#xff1a; sudo yum update sudo yum install java-11-openjdk-devel把服务器端&#xff08;CS工具分服务器端和客户端&#xff09;的CS安装到服务器上后给目录下的…

mysql原理--B+树索引的使用

1.索引的代价 在介绍如何更好的使用索引之前先要了解一下使用这玩意儿的代价&#xff0c;它在空间和时间上都会拖后腿&#xff1a; (1). 空间上的代价 这个是显而易见的&#xff0c;每建立一个索引都要为它建立一棵 B 树&#xff0c;每一棵 B 树的每一个节点都是一个数据页&…

Proxmark3 Easy救砖-20231209

事情是这样的&#xff0c;在淘宝买了个PM3&#xff0c;拿到手后刷固件的&#xff0c;一不小心刷成砖头了&#xff0c;现象就是四个灯全亮&#xff0c;插上电脑USB不识别。问商家他也不太懂&#xff0c;也是个半吊子技术&#xff0c;远程给我刷机搞了半天也没有搞定&#xff0c;…

Softmax回归

一、Softmax回归关键思想 1、回归问题和分类问题的区别 Softmax回归虽然叫“回归”&#xff0c;但是它本质是一个分类问题。回归是估计一个连续值&#xff0c;而分类是预测一个离散类别。 2、Softmax回归模型 Softmax回归跟线性回归一样将输入特征与权重做线性叠加。与线性回归…

排序算法:【冒泡排序】、逻辑运算符not用法、解释if not tag:

注意&#xff1a; 1、排序&#xff1a;将一组无序序列&#xff0c;调整为有序的序列。所谓有序&#xff0c;就是说&#xff0c;要么升序要么降序。 2、列表排序&#xff1a;将无序列表变成有序列表。 3、列表这个类里&#xff0c;内置排序方法&#xff1a;sort( )&#xff0…

排序-选择排序与堆排序

文章目录 一、选择排序二、堆排序三、时间复杂度四、稳定性 一、选择排序 思想&#xff1a; 将数组第一个元素作为min&#xff0c;然后进行遍历与其他元素对比&#xff0c;找到比min小的数就进行交换&#xff0c;直到最后一个元素就停止&#xff0c;然后再将第二个元素min&…

使用NCNN在华为M5部署MobileNet-SSD

一、下载ncnn-android-vulkan ncnn-android-vulkan.zip 文件是一个压缩文件&#xff0c;其中包含了 ncnn 框架在 Android 平台上使用 Vulkan 图形库加速的相关文件和代码。 在 Android 平台上&#xff0c;ncnn 框架可以利用 Vulkan 的并行计算能力来进行神经网络模型的推理计…