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

文章介绍了如何在Qt应用程序中创建启动动画,包括使用QSplashScreen加载静态图片和gif动图,以及播放视频动画。通过QSplashScreen类,可以在程序启动时显示图片并显示加载进度信息,同时提供了将启动动画置于所有窗口顶层的方法。示例代码展示了加载静态图片和视频动画的具体实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


软件启动动画效果

先来看效果。下面录制了加载图片和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()来模拟“停留在顶部”的效果。
最常见的用法是在主小部件显示在屏幕上之前显示一个闪屏。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

林夕07

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值