首页 > 其他分享 >Qt 实现启动动画

Qt 实现启动动画

时间:2024-10-28 22:44:29浏览次数:7  
标签:动画 Qt overlayLabel 启动 QPropertyAnimation mInterfaceColor mOverlayLabelAnimation

受bilibili客户端启发,同款效果动画

初始化

void MainWindow::initOverlayLabelAnimation()
{

    // 在central widget上创建一个覆盖的label
    overlayLabel = new QLabel(this);
    // 加载logo图片
    QPixmap pix = QPixmap(PNG_LINEX);
    float scaled = 0.3;
    overlayLabel->setPixmap(pix.scaled(pix.width() * scaled, pix.height() * scaled, Qt::KeepAspectRatio, Qt::SmoothTransformation));
    overlayLabel->setAlignment(Qt::AlignCenter);
    overlayLabel->setGeometry(0, 0, geometry().width(), geometry().height());
    if (mInterfaceColor == QColor(Qt::black)) {
        overlayLabel->setStyleSheet(QString("background-color: rgb(12,12,12);"));
    }
    else {
        overlayLabel->setStyleSheet(QString("background-color: rgba(%1, %2, %3, %4);").arg(mInterfaceColor.red()).arg(mInterfaceColor.green()).arg(mInterfaceColor.blue()).arg(mInterfaceColor.alpha()));
    }

    // 设置透明度效果
    QGraphicsOpacityEffect* opacityEffect = new QGraphicsOpacityEffect(overlayLabel);
    overlayLabel->setGraphicsEffect(opacityEffect);
    opacityEffect->setOpacity(1);

    // 创建渐变动画
    mOverlayLabelAnimation = new QPropertyAnimation(opacityEffect, "opacity");
    mOverlayLabelAnimation->setDuration(600); // 持续时间ms
    mOverlayLabelAnimation->setStartValue(1);
    mOverlayLabelAnimation->setEndValue(0);
    mOverlayLabelAnimation->setEasingCurve(QEasingCurve::InOutQuad);

    // 设置动画结束的操作
    connect(mOverlayLabelAnimation, &QPropertyAnimation::finished, overlayLabel, &QLabel::hide);
    connect(mOverlayLabelAnimation, &QPropertyAnimation::finished, mOverlayLabelAnimation, &QPropertyAnimation::deleteLater);
    connect(mOverlayLabelAnimation, &QPropertyAnimation::finished, this, &MainWindow::SignalOverlayLabelAnimationFinished);

}

启动
void MainWindow::showWindow()
{
    this->show();
    
    // 延时1秒后启动动画
    QTimer::singleShot(1000, this, [=]() {
        mOverlayLabelAnimation->start();
        });
}

标签:动画,Qt,overlayLabel,启动,QPropertyAnimation,mInterfaceColor,mOverlayLabelAnimation
From: https://www.cnblogs.com/Yzi321/p/18511846

相关文章

  • Qt电子相册
    目录项目要求项目实现 ui设计代码dialog.hdialog.cpp源码项目要求基于作业3.0,增添以下功能:1.优化图片和代码逻辑2.增加自动翻页功能3.增加试试手气功能项目实现 ui设计 代码dialog.h#ifndefDIALOG_H#defineDIALOG_H#include<QDialog>#incl......
  • Qt作业3.0
    目录题目:ui界面设计:​编辑代码:dialog.hdialog.cppmain.cpp源码:题目:设计一个电子相册,点击上一张,切换到上一张图片,点击下一张,切换到下一张图片。要求:图片的展示可以循环,使用QList<QString>存储图片路径ui界面设计:代码:dialog.h//头文件dialog.h#ifn......
  • day10(Qt)OpenCV
    目录OpenCV1.OpenCV简介2.环境搭建3.人脸检测OpenCV1.OpenCV简介OpenCV(OpenSourceComputerVisionLibrary)是一个开源的计算机视觉库,它提供了丰富的图像处理和计算机视觉功能。该库由英特尔公司发起,并在BSD许可证下发布,因此它是免费的,且开放源代码。OpenCV......
  • 基于YOLOv8深度学习的吸烟/抽烟行为检测系统【python源码+Pyqt5界面+数据集+训练代码
    背景及意义吸烟行为检测对于维护公共场所的健康环境、防止火灾事故的发生以及促进健康生活方式都具有重要作用。使用基于YOLOv8的吸烟行为检测系统能够有效识别视频中的吸烟行为,从而及时采取适当措施。本文基于YOLOv8深度学习框架,通过2357张图片,训练了一个进行吸烟行为的......
  • 基于YOLOv10/YOLOv9/YOLOv8深度学习的工业螺栓螺母检测系统【python源码+Pyqt5界面+数
    背景及意义工业螺栓螺母检测系统的实施显著提高了制造行业的产品质量和工作效率。该系统的应用涵盖了从生产、检查到包装等各个环节,为精密设备的维护和安全运行提供了强大的技术支持。本文基于YOLOv10/YOLOv9/YOLOv8深度学习框架,通过2548张工业螺栓螺母的相关图片,训练了可......
  • 基于YOLOv10/v9/v8深度学习的金属焊缝缺陷检测系统【python源码+Pyqt5界面+数据集+训
    背景及意义金属焊缝缺陷检测系统的实现显著提高了众多工业领域产品的安全性和可靠性。自动化的检测过程不仅增加了工作效率,还降低了人力成本和事故风险。本文基于YOLOv10/v9/v8深度学习框架,通过3170张金属焊缝缺陷的相关图片,训练了可进行焊缝缺陷目标检测的模型,可以分别......
  • 基于YOLOv8深度学习的人脸面部口罩检测系统【python源码+Pyqt5界面+数据集+训练代码】
    背景及意义人脸口罩面部检测能够准确地检测人脸是否佩戴口罩,对于控制疫情传播、保障公共卫生安全起到关键作用。本文基于YOLOv8深度学习框架,通过853张图片,训练了一个进行人脸面部口罩的目标检测模型,能够准确的检测人脸“戴口罩”、“未戴口罩”及“未正确佩戴口罩”。并基......
  • d3dx9_43.dll缺失导致小小世界Smalland无法启动?小小世界Smalland玩家必看d3dx9_43.dll
    当d3dx9_43.dll文件缺失导致小小世界Smalland无法启动时,作为玩家,你可以采取以下紧急应对措施来解决这一问题:一、了解d3dx9_43.dll文件的重要性d3dx9_43.dll是DirectX9.0c的一个重要组件,它负责为基于DirectX技术的游戏和应用程序提供图形和声音效果的支持。如果该文件缺失或......
  • PE工具和Ventoy无法启动的ISO文件再试试Rufus[青锐CC]
    一、PE工具运行可启动ISO文件的限制PE工具在传统BIOS(Legacy)启动模式下有工具菜单,可以启动自定义的映像文件,可是在UEFI模式下没有工具菜单,无法启动自定义的映像文件。现在核显越来越强大,普通办公用核显就可以,够用还省电,可是用核显就开不了CSM,也就是只能用UEFI模式,PE工具就无......
  • Qt gridLayout布局占两格或两列在ui文件中实现
         在Qt  gridLayou布局里添加一个控件如何设置其占两格或多格   如下图:             一、如果是纯代码编写的界面 (大多是这个方式)     在纯代码编写的界面应用中,可以使用函数QGridLayout::addWidget(QWidget*w,intr......