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

目录

  • 软件启动动画效果
    • 静态背景
    • 动态背景
  • 程序启动动画
  • QSplashScreen
  • 启动时加载静态图片
  • 启动时加载视频动画
  • 将启动动画置于所有窗口顶层


软件启动动画效果

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

静态背景

动态背景

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

程序启动动画

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

QSplashScreen

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

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

启动时加载静态图片

#include "mainwindow.h"

#include 
#include 
#include 
#include 
#include 
#include 

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 
#include 
#include 
#include 
#include 
#include 

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()来模拟“停留在顶部”的效果。
最常见的用法是在主小部件显示在屏幕上之前显示一个闪屏。

你可能感兴趣的:(Qt,qt,开发语言,C++,启动动画,动画)