Qt设置软件启动动画(支持图片和视频俩种方式)

2023-11-19


软件启动动画效果

先来看效果。下面录制了加载图片和gif动图的俩种效果。

静态背景

在这里插入图片描述

动态背景

这里我加载了一个gif的动图,你也可以使用一段录制好的视频。
在这里插入图片描述

程序启动动画

许多应用程序都会在启动的时候显示一个程序启动画面(splash screen) , l
可以使用程序启动画面对缓慢的启动过程进行掩饰,还可以用于满足审美要求进行添加。使用QSplashScreen类,可以非常容易地为Qt应用程序添加一个程序启动画面。

QSplashScreen

QSplashScreen类会在应用程序的主窗口出现之前显示一个图片。它也可以在这个图片上显示一些消息,用来通知用户有关应用程序初始化的过程。通常,程序启动画面的代码会放在main()函数中,位于QApplication: : exec()调用之前。

在使用前,先介绍几个重要的方法。
setPixmap用来加载静态图片的。
showMessage用来显示加载时需要说明的文字以及显示位置。
finish用来绑定启动画面与主界面,当主界面初始化完毕后自动销毁启动动画。

启动时加载静态图片

#include "mainwindow.h"

#include <QApplication>
#include <QDateTime>
#include <QLabel>
#include <QMovie>
#include <QSplashScreen>
#include <QThread>

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

    QSplashScreen* splash = new QSplashScreen();

    splash->setPixmap(QPixmap(":/load.png"));
    splash->show();

    splash->showMessage(QObject::tr("load..."), Qt::AlignCenter, Qt::red);

    QDateTime time = QDateTime::currentDateTime();
    QDateTime currentTime = QDateTime::currentDateTime(); //记录当前时间
    int i = 0;
    while (time.secsTo(currentTime) <= 3) 
    {
        a.processEvents();
        splash->showMessage(QObject::tr("load."), Qt::AlignCenter, Qt::red);
        QThread::msleep(200);
        splash->showMessage(QObject::tr("load.."), Qt::AlignCenter, Qt::red);
        QThread::msleep(200);
        splash->showMessage(QObject::tr("load..."), Qt::AlignCenter, Qt::red);
        QThread::msleep(200);
        currentTime = QDateTime::currentDateTime();

    };
    MainWindow w;

    w.show();
    splash->finish(&w);
    return a.exec();
}

启动时加载视频动画

#include "mainwindow.h"

#include <QApplication>
#include <QDateTime>
#include <QLabel>
#include <QMovie>
#include <QSplashScreen>
#include <QThread>

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

    QSplashScreen* splash = new QSplashScreen();
    
    QLabel label(reinterpret_cast<QWidget*>(splash));
    QMovie mv(":/load.gif");
    label.setMovie(&mv);
    mv.start();
    splash->show();
    splash->setCursor(Qt::BlankCursor);
    for (int i = 0; i < 3000; i += mv.speed()) {
        a.processEvents(); //防止界面出现无响应
        qDebug() << QString::number(mv.speed());
        QThread::msleep(mv.speed()); 
    }
    MainWindow w;

    w.show();
    splash->finish(&w);
    return a.exec();
}

将启动动画置于所有窗口顶层

这里引用一些Qt帮助手册的一段说明

启动画面出现在屏幕中央。添加Qt::WindowStaysOnTopHint到splash小部件的窗口标志可能是有用的,如果你想让它在桌面上的所有其他窗口之上。一些X11窗口管理器不支持“停留在顶部”标志。一个解决方案是设置一个计时器,定期调用启动屏幕上的raise()来模拟“停留在顶部”的效果。
最常见的用法是在主小部件显示在屏幕上之前显示一个闪屏。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Qt设置软件启动动画(支持图片和视频俩种方式) 的相关文章

  • 使用 Qt 的网络服务

    我正在寻找使用 Qt 服务器端 实现 Web 服务的代码 如果您有任何信息 我将不胜感激 Regards 您可以使用libqxt http libqxt bitbucket org doc 0 6 qxtweb html实现服务器端Web服
  • 是否需要销毁运算符删除的形式才能真正销毁对象?

    C 20 添加了破坏形式operator delete区别于std destroying delete t范围 它导致delete表达式在调用之前不再销毁对象operator delete 目的是在显式调用对象的析构函数和释放内存之前 允许
  • 使用 ADAL v3 使用 ClientID 对 Dynamics 365 进行身份验证

    我正在尝试对我们的在线 Dynamics CRM 进行身份验证以使用可用的 API 我能找到的唯一关于执行此操作的官方文档是 https learn microsoft com en us dynamics365 customer enga
  • 捕获 .aspx 和 .ascx 页面中的异常

    问题说明了一切 请看以下示例代码 ul li li ul
  • C# 中的 Stack<> 实现

    我最近一直在实现递归目录搜索实现 并且使用堆栈来跟踪路径元素 当我使用 string Join 连接路径元素时 我发现它们被颠倒了 当我调试该方法时 我查看了堆栈 发现堆栈内部数组中的元素本身是相反的 即最近 Push 的元素位于内部数组的
  • 在 C 语言中,为什么数组的地址等于它的值?

    在下面的代码中 指针值和指针地址与预期不同 但数组值和地址则不然 怎么会这样 Output my array 0022FF00 my array 0022FF00 pointer to array 0022FF00 pointer to a
  • 在 Mono 中反序列化 JSON 数据

    使用 Monodroid 时 是否有一种简单的方法可以将简单的 JSON 字符串反序列化为 NET 对象 System Json 只提供序列化 不提供反序列化 我尝试过的各种第三方库都会导致 Mono Monodroid 出现问题 谢谢 f
  • 如何修复错误:“检测到无法访问的代码”

    我有以下代码 private string GetAnswer private int CountLeapYears DateTime startDate return count String answer GetAnswer Respo
  • Makefile 和 .Mak 文件 + CodeBlocks 和 VStudio

    我对整个 makefile 概念有点陌生 所以我对此有一些疑问 我正在 Linux 中使用 CodeBlocks 创建一个项目 我使用一个名为 cbp2mak 的工具从 CodeBlocks 项目创建一个 make 文件 如果有人知道更好的
  • 让网络摄像头在 OpenCV 中工作

    我正在尝试让我的网络摄像头在 Windows 7 64 位中的 OpenCV 版本 2 2 中捕获视频 但是 我遇到了一些困难 OpenCV 附带的示例二进制文件都无法检测到我的网络摄像头 最近我发现这篇文章表明答案在于重新编译一个文件 o
  • 如何从 Boost.PropertyTree 复制子树

    我有一些boost property tree ptree 我需要树来删除一些具有特定标签名称的元素 例如 xml 表示源ptree如下
  • MySQL 连接器 C++ 64 位在 Visual Studio 2012 中从源代码构建

    我正在尝试建立mySQL 连接器 C 从源头在视觉工作室2012为了64 bit建筑学 我知道这取决于一些boost头文件和C 连接器 跑步CMake生成一个项目文件 但该项目文件无法编译 因为有一大堆非常令人困惑的错误 这些错误可能与包含
  • SQLAPI++ 的免费替代品? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 是否有任何免费 也许是开源 的替代品SQLAPI http www sqlapi com 这个库看起来
  • 读取依赖步行者输出

    I am having some problems using one of the Dlls in my application and I ran dependency walker on it i am not sure how to
  • 如何编写一个接受 int 或 float 的 C 函数?

    我想用 C 语言创建一个扩展 Python 的函数 该函数可以接受 float 或 int 类型的输入 所以基本上 我想要f 5 and f 5 5 成为可接受的输入 我认为我不能使用if PyArg ParseTuple args i v
  • 如何组合两个 lambda [重复]

    这个问题在这里已经有答案了 可能的重复 在 C 中组合两个 lambda 表达式 https stackoverflow com questions 1717444 combining two lamba expressions in c
  • Streamwriter 覆盖 txt 文件中的文本

    有没有什么方法可以重新打开流写入器而不创建新的写入对象 因为此时 当调用 WriteOdd 时 streamwriter 正在覆盖在它之前调用的 WriteEven public void WriteEven StreamWriter wr
  • 如果将变量设置为等于新对象,旧对象会发生什么?

    假设我们有一个 X 类not有一个超载的operator 功能 class X int n X n 0 X int n n n int main X a 1 an object gets constructed here more code
  • .Net Reactive Extensions Framework (Rx) 是否考虑拓扑顺序?

    Net 反应式扩展框架是否按拓扑顺序传播通知以最大限度地减少更新量 就像 Scala Rx 所做的那样 Net 反应式扩展 Rx 是否可以 https github com lihaoyi scala rx wiki How it Work
  • 从后面的代码添加外部 css 文件

    我有一个 CSS 文件 例如 SomeStyle css 我是否可以将此样式表文档从其代码隐藏应用到 aspx 页面 您可以将文字控件添加到标头控件中 Page Header Controls Add new System Web UI L

随机推荐

  • 源文件字符集,编译器内部字符集,执行字符集,控制台乱码问题,Qt中文问题

    源文件字符集 源文件本身也是文本文件 所以源文件字符集是指源文件保存时采用哪种字符集编码 VC 下源文件默认是gbk编码 如果想要更改 可以通过 文件 高级保存选项 修改某个源文件的编码方式 似乎没有什么选项能够设置创建项目时的源文件编码
  • 如何编写测试用例

    文章目录 测试用例的内容 等价类 边界值分析法 流程分析法 判定表法 正交试验法 测试用例的内容 用例编号 用于唯一的识别用例 能够根据用例编号识别我们测试所属的产品 模块 测试阶段等 一般格式为 A B C D A 一般用来表示产品或者项
  • Heating Up (单调栈,在环上选择一个点为起点,若有一边权值小于当前值,则吃掉那个点并获得相应贡献)

    https codeforces com gym 104064 problem H include
  • js计算两日期相差的天数、月数

    返回两个日期相差的月数function MonthsBetw date1 date2 date1和date2是2019 3 12格式 用 分成数组 date1 date1 split date2 date2 split 获取年 月数 var
  • 8086乘法指令MUL,IMUL

    对于加减指令来说CPU对有符号加减和无符号加减一视同仁 根据我们需要把它作为有符号的结果还是无符号的结果 但是乘除法指令区分有符号乘除和无符号乘除指令 无符号数乘法指令MUL MULtiply MUL OPRD OPRD可以用除立即数以外的
  • AD15设置覆铜与边框尺寸

    铺板铜边到的间距要比到其它的间距的优先级要高
  • 修改 placeholder 样式,placeholder 换行 以及iOS 上设置placeholder被遮挡

    修改placeholder样式 通过选择器就可以简单的修改该placeholder的样式 input placeholder font size 14px color 666666 placeholder 换行 在input 里面很少用到
  • Spring的@Autowired注解原理分析

    一 Autowired的作用 Autowired常用来作属性的注入 可以作用在构造方法 普通方法 字段 注解 参数上 将构造函数 字段 设置方法或配置方法标记为由Spring 的依赖注入工具自动装配 Autowired注解做过开发的肯定都很
  • linux 远程管理ssh sz/rz

    sentos7 连接配置 安装sentos7 自行安装sentos7 建议使用virtualBox创建 服务端安装openssh server 检查是否已经安装openssh server vagrant localhost yum lis
  • 学习笔记Controller

    转自 http elim iteye com blog 1753271 谢谢博主分享 SpringMVC Controller 介绍 一 简介 在SpringMVC 中 控制器Controller 负责处理由DispatcherServle
  • 【Git

    个人格言 时间是亳不留情的 它真使人在自己制造的镜子里照见自己的真相 Git专栏 Git篇 JavaScript专栏 js实用技巧篇 该专栏持续更新中 目的是给大家分享一些常用实用技巧 同时巩固自己的基础 共同进步 欢迎前来交流 你的一键三
  • 树莓派配置热点官网操作指引

    参考官方原说明链接 https www raspberrypi org documentation computers configuration html enable routing and ip masquerading 1 安装接入
  • virt-manger创建虚拟机及virtio网卡

    可以把创建的vm node及network的xml文件导出来存放 以后可以使用命令创建 sudo apt get install qemu kvm virsh define vm0 xml 导入虚拟机配置 virsh start vm0 开
  • C++之多态详解

    文章目录 前言 一 多态的概念 概念 二 多态的定义及实现 1 多态的构成条件 2 虚函数 3 虚函数的重写 3 1多态条件探究 1 多态条件探究一 不符合重写 virtual函数 2 多态条件探究二 不符合重写 不是父类的指针或者引用调用
  • 内存管理 kmalloc

    section 0 preface 用户态的heap 是由glibc实现的 内核则自力更生的 所以内核的heap差别挺大的 从最直观的角度去看 在进行内核模块编写的时候 我们可以调用的heap相关函数 是kmalloc 以及kfree 那么
  • 立体电影

    立体电影 百科名片 1953年5月24日立体电影首次出现 为了把观众从电视夺回来 好莱坞推出了一种新玩艺儿 立体电影 戴着特殊眼镜的观众像在观看 布瓦那魔鬼 及 蜡屋 这类惊险片那样 发现自己躲在逃跑的火车及魔鬼的后面 从而为我们带入了立体
  • 微信小程序:用户基本信息的采集

    文章目录 写作背景 getUserInfo与getUserProfile open data 头像昵称填写能力 总结 写作背景 在开发商城小程序时需要显示用户头像 昵称 手机号等信息以便后续业务的实现 因此需要通过微信小程序的API采集用户
  • ​【机器学习】数据科学中 17 种相似性和相异性度量(上)

    本文解释了计算距离的各种方法 并展示了它们在我们日常生活中的实例 限于篇幅 便于阅读 将本文分为上下两篇 希望对你有所帮助 There is no Royal Road to Geometry 欧几里得 简介 相似性和相异性 在数据科学中
  • JFinal DB.tx()事务

    1 发现问题 1 功能实现逻辑 添加一个新的系统的时候 先添加系统本身 即名称 地址 简介 将这些存入system表 得到system id 添加系统所处的服务器 由于有专门的添加服务器功能 所以这里的服务器只用填地址 如果地址对应服务器不
  • Qt设置软件启动动画(支持图片和视频俩种方式)

    目录 软件启动动画效果 静态背景 动态背景 程序启动动画 QSplashScreen 启动时加载静态图片 启动时加载视频动画 将启动动画置于所有窗口顶层 软件启动动画效果 先来看效果 下面录制了加载图片和gif动图的俩种效果 静态背景 动态