【嵌入式学习】QT-Day3-Qt基础

news2024/11/15 6:46:10

1> 思维导图

https://lingjun.life/wiki/EmbeddedNote/20QT

2> 完善登录界面

完善对话框,点击登录对话框,如果账号和密码匹配,则弹出信息对话框,给出提示”登录成功“,提供一个Ok按钮,用户点击Ok后,关闭登录界面,跳转到其他界面
在这里插入图片描述

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

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

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

#include "mywidget.h"
#include <QPainterPath>
#include "aerowidget.h"

MyWidget::MyWidget(QWidget *parent)
    : QWidget(parent)
{
    // 窗口设置
    setWindowTitle("登录"); // 设置窗口标题
    setWindowFlag(Qt::FramelessWindowHint); // 设置窗口无边框
    resize(400,560); // 设置窗口大小
    setFixedSize(400,560); // 固定窗口大小

    // 设置窗口图标
    setWindowIcon(QIcon("C:\\Users\\lingj\\Desktop\\QT\\test1_1\\favicon.ico"));

    // 创建并设置 QLabel
    QLabel *l1 = new QLabel(this);
    l1->setText("hello world");
    l1->setParent(this);
    l1->resize(320,100);
    l1->move(40,40);
    l1->setPixmap(QPixmap(":/pic/hello.png")); // 设置图片
    l1->setScaledContents(true); // 图片自适应大小

    // 创建 AeroWidget
    AeroWidget aw(this);
    aw.setAlpha(4);
    // 设置窗口圆角矩形遮罩
    aw.setMask(createMask());

    // 加入文本输入框
    username = new QLineEdit(this);
    username->move(40,210);
    username->resize(320,50);
    username->setStyleSheet("background-color:rgb(255,255,255);"
                            "border-radius:10px");
    username->setAlignment(Qt::AlignCenter);
    username->setPlaceholderText("账号\\电话\\邮箱");

    passwd = new QLineEdit(this);
    passwd->move(40,280);
    passwd->resize(320,50);
    passwd->setStyleSheet("background-color:rgb(255,255,255);"
                          "border-radius:10px");
    passwd->setAlignment(Qt::AlignCenter);
    passwd->setPlaceholderText("密码");
    passwd->setEchoMode(QLineEdit::Password); // 设置密码模式

    // 创建登录按钮
    QPushButton *p1 = new QPushButton("登录",this);
    p1->move(40,400);
    p1->resize(320,50);
    p1->setStyleSheet("background-color:rgb(255,255,255);"
                      "border-radius:10px");

    connect(p1, &QPushButton::clicked, this, &MyWidget::on_login_clicked); // 连接登录按钮的点击事件


    // 创建关闭按钮
    QPushButton *closeButton = new QPushButton("×", this); // Close button
    closeButton->setFixedSize(20, 20);
    closeButton->move(width() - closeButton->width() - 5, 5);
    closeButton->setStyleSheet("background-color:transparent;color:white;font-size:16px;");
    connect(closeButton,SIGNAL(clicked()),this,SLOT(on_close_clicked())); // 连接关闭按钮的点击事件

    // 创建最小化按钮
    QPushButton *minimizeButton = new QPushButton("-", this); // Minimize button
    minimizeButton->setFixedSize(20, 20);
    minimizeButton->move(width() - minimizeButton->width() - closeButton->width() - 5, 5);
    minimizeButton->setStyleSheet("background-color:transparent;color:white;font-size:16px;");
    connect(minimizeButton, &QPushButton::clicked, this, &QWidget::showMinimized); // 连接最小化按钮的点击事件

    // 设置鼠标追踪
    setMouseTracking(true);
}

MyWidget::~MyWidget()
{

}
void MyWidget::on_close_clicked()
{
    int res = QMessageBox::question(this,"提示","您是否要退出登录?",QMessageBox::Yes | QMessageBox::No);
    if(res == QMessageBox::Yes)
    {
        close();
    }
}
void MyWidget::on_login_clicked()
{
    qDebug() << "登录中……" ;
    if(username->text()=="admin" & passwd->text()== "123456")
    {
        qDebug() << "登录成功";
        int res = QMessageBox::information(this,"提示","登陆成功",QMessageBox::Ok);
        if(res == QMessageBox::Ok)
        {
            close();
            emit my_jump();
        }

    }else{
        int res = QMessageBox::information(this,
                                           "提示",
                                           "账号和密码不匹配",
                                           QMessageBox::Yes | QMessageBox::No);
        if(res == QMessageBox::Yes)
        {
            username->clear();
            passwd->clear();
        }
        else
        {
            close();
        }
        qDebug() << "登录失败,用户名或密码错误";
    }
}

// 创建窗口遮罩的函数
QRegion MyWidget::createMask() const
{
    int radius = 18; // 圆角半径
    QSize size = this->size();
    QRegion region;

    QPainterPath path;
    path.addRoundedRect(QRectF(QPointF(0, 0), size), radius, radius); // 创建圆角矩形路径
    region = QRegion(path.toFillPolygon().toPolygon()); // 转换为多边形区域

    return region;
}

// 重写鼠标按下事件
void MyWidget::mousePressEvent(QMouseEvent *event)
{
    if (event->button() == Qt::LeftButton) {
        // 保存鼠标按下时的位置和窗口位置
        m_dragPos = event->globalPos() - frameGeometry().topLeft();
        event->accept();
    }
}

// 重写鼠标移动事件
void MyWidget::mouseMoveEvent(QMouseEvent *event)
{
    if (event->buttons() & Qt::LeftButton) {
        // 移动窗口到鼠标位置
        move(event->globalPos() - m_dragPos);
        event->accept();
    }
}

main.cpp

#include "mywidget.h"
#include "aerowidget.h"
#include "sec.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MyWidget w;
    sec s;
    w.show();
    QObject::connect(&w,&MyWidget::my_jump, &s, &sec::my_jump_slot);
    return a.exec();
}

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

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

相关文章

igolang学习3,golang 项目中配置gin的web框架

1.go 初始化 mod文件 go mod init gin-ranking 2.gin的crm框架 go get -u github.com/gin-gonic/gin 3.go.mod爆红解决

C2-1.4(L1,L2)正则化

C2-1.4&#xff08;L1,L2&#xff09;正则化 参考书籍 1 正则化的概念 正则化(Regularization) 是机器学习中对原始损失函数引入额外信息&#xff0c;以便防止过拟合和提高模型泛化性能的一类方法的统称。也就是目标函数变成了原始损失函数额外项&#xff0c;常用的额外项一般…

Oladance、南卡、韶音开放式耳机怎么样?3个月真实对比测评

​哪款开放式耳机好用&#xff1f;我亲自体验并评测了市场上流行的三个品牌的开放式耳机&#xff1a;Oladance、南卡、韶音。通过深入测试多维度性能表现&#xff0c;确保你能够远离劣质产品可能带来的问题。我想提醒大家&#xff0c;如果选错耳机可能会影响到音乐的真实还原和…

【高德地图】Android搭建3D高德地图详细教

&#x1f4d6;Android搭建3D高德地图详细教程 &#x1f4d6;第1章 高德地图介绍✅了解高德地图✅2D地图与3D地图 &#x1f4d6;第2章 搭建3D地图并显示✅第 1 步&#xff1a;创建 Android 项目✅第 2 步&#xff1a;获取高德Key✅第 3 步&#xff1a;下载地图SDK✅第 4 步&…

2023 龙蜥操作系统大会演讲实录:《兼容龙蜥的云原生大模型数据计算系统——πDataCS》

本文主要分三部分内容&#xff1a;第一部分介绍拓数派公司&#xff0c;第二部分介绍 πDataCS 产品&#xff0c;最后介绍 πDataCS 与龙蜥在生态上的合作。 杭州拓数派科技发展有限公司&#xff08;简称“拓数派”&#xff0c;英文名称“OpenPie”&#xff09;是国内基础数据计…

Android platform tool中d8.bat不生效

d8.bat因找不到java_exe文件&#xff0c;触发EOF d8.bat中之前代码为&#xff1a; set java_exe if exist "%~dp0..\tools\lib\find_java.bat" call "%~dp0..\tools\lib\find_java.bat" if exist "%~dp0..\..\tools\lib\find_java.bat" …

【教3妹学编程-算法题】匹配模式数组的子数组数目 II

3妹&#xff1a;2哥2哥&#xff0c;你有没有看到上海女老师出轨男学生的瓜啊。 2哥 : 看到 了&#xff0c;真的是太毁三观了&#xff01; 3妹&#xff1a;是啊&#xff0c; 老师本是教书育人的职业&#xff0c;明确规定不能和学生谈恋爱啊&#xff0c;更何况是出轨。 2哥 : 是啊…

petalinux_zynq7 驱动DAC以及ADC模块之一:建立IP

0. 环境 - ubuntu18 - vivado 2018.3 - mizar z7010 ada106模块 1. vivado 1.1 创建vivado工程 运行vivado source /tools/Xilinx/Vivado/2018.3/settings64.sh vivado& 创建vivado工程 Vivado -> Create Project -> Next -> -> Project name: …

【论文阅读笔记】Revisiting RCAN: Improved Training for Image Super-Resolution

论文地址&#xff1a;https://arxiv.org/abs/2201.11279 代码地址&#xff1a;https://github.com/zudi-lin/rcan-it 论文小结 本文的工作&#xff0c;就是重新审视之前的RCAN&#xff0c;然后做实验来规范化SR任务的训练流程。 此外&#xff0c;作者得出一个结论&#xff1a;…

Vue单文件学习项目综合案例Demo,黑马vue教程

文章目录 前言一、小黑记事本二、购物车三、小黑记账清单 前言 bilibili视频地址 一、小黑记事本 效果图 主代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"/><meta http-equiv"X-UA-Compatible&…

linux增加物理磁盘并挂载到文件系统

centos7增加物理磁盘并挂载到文件系统 1、查看所有磁盘情况 fdisk -l2、创建挂载路径 mkdir /data3、格式化磁盘 #磁盘filesystem(上图标红处) mkfs.xfs -f /dev/sda建议 与其它磁盘文件系统保持一致&#xff0c;我这里是xfs 可通过 cat /dev/sda查看 4、挂载 mount /dev/…

5个精美的wordpress中文企业主题模板

元宇宙WordPress主题模板 简洁大气的元宇宙 Metaverse WordPress主题模板&#xff0c;适合元宇宙行业的企业官网使用。 https://www.jianzhanpress.com/?p3292 职业技术培训WordPress主题模板 简洁大气的职业技术培训WordPress主题&#xff0c;适合用于搭建教育培训公司官方…

3个wordpress中文企业主题模板

农业畜牧养殖wordpress主题 简洁大气的农业畜牧养殖wordpress主题&#xff0c;农业农村现代化&#xff0c;离不开新农人、新技术。 https://www.jianzhanpress.com/?p3051 老年公寓wordpress主题 浅绿色简洁实用的老年公寓wordpress主题&#xff0c;适合做养老业务的老年公…

37.仿简道云公式函数实战-数学函数-SIN

1. SIN函数 SIN 函数可用于计算角度的正弦值&#xff0c;返回 -1 到 1 之间的数值。 2. 函数用法 SIN(弧度) 使用该函数时&#xff0c;需要将角度转化为弧度参与计算&#xff0c;可通过 RADIANS 函数 将角度转化为弧度。 3. 函数示例 如计算 SIN(30) 的值&#xff0c;可设…

【linux进程间通信(二)】共享内存详解以及进程互斥概念

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:Linux从入门到精通⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学更多操作系统知识   &#x1f51d;&#x1f51d; 进程间通信 1. 前言2. 共享内…

【stm32】hal库学习笔记-UART/USART串口通信(超详细!)

【stm32】hal库学习笔记-UART/USART串口通信 hal库驱动函数 CubeMX图形化配置 导入LCD.ioc RTC设置 时钟树配置 设置LSE为RTC时钟源 USART设置 中断设置 程序编写 编写主函数 /* USER CODE BEGIN 2 */lcd_init();lcd_show_str(10, 10, 16, "Demo12_1:USART1-CH340&q…

MLflow【部署 01】MLflow官网Quick Start实操安装、模型训练、数据预测(一篇学会部署使用MLflow)

一篇学会部署使用MLflow 1.版本及环境2.官方步骤Step 1 - Get MLflowStep 2 - Start a Tracking ServerStep 3 - Train a model and prepare metadata for loggingStep 4 - Log the model and its metadata to MLflowStep 5 - Load the model as a Python Function (pyfunc) an…

yolov5导出onnx转engine推理

yolov5导出注意事项 配置 需要提供配置文件和权重文件&#xff0c;不然导出模型不能正常推理。 默认提供检测头。 ModuleNotFoundError: No module named ‘tensorrt’安装TensorRT-python发现报错 由于ModuleNotFoundError: No module named ‘tensorrt’安装TensorRT-pyt…

备战蓝桥杯—— 双指针技巧巧答链表1

对于单链表相关的问题&#xff0c;双指针技巧是一种非常广泛且有效的解决方法。以下是一些常见问题以及使用双指针技巧解决&#xff1a; 合并两个有序链表&#xff1a; 使用两个指针分别指向两个链表的头部&#xff0c;逐一比较节点的值&#xff0c;将较小的节点链接到结果链表…

【学习iOS高质量开发】——协议与分类

文章目录 一、通过委托与数据源协议进行对象间通信1.委托模式2.要点 二、将类的实现代码分散到便于管理的数个分类之中1.如何实现2.要点 三、总是为第三方类的分类名称加前缀1.为什么总是为第三方类的分类名称加前缀2.要点 三、勿在分类中声明属性1.勿在分类中声明属性的原因2.…