Qt学习--程序启动画面QSplashScreen

QSplashScreen是Qt框架提供的一个类,用于在应用程序启动时显示一个带有文本和图像的启动画面(Splash Screen)。

使用QSplashScreen类,你可以在应用程序启动时显示一个自定义的启动画面,以提供更好的用户体验。这个类提供了一些方法和属性,可以让你设置启动画面的文本、图像和其他样式。

启动画面有两种,一种是静态启动画面,即运行程序显示一个界面(一张图片),显示结束后关闭程序界面。另一种是动态画面,即运行程序显示一个动态画面,通常是一段视频、或一个gif格式图片,播放结束后运行程序。

QSplashScreen类构造函数默认传入QPixMap类型的参数,因此,静态启动和动态启动所需要的画面都需要借助QPixMap类。下图是QSplashScreen类的构造函数详情:

1.静态启动画面
首先用QPixMap加载图像,然后传入QPixMap作为参数创建一个QSplashScreen类,调用show()显示。在show()之后调用QApplication::processEvents()。关于processEvents事件循环,文档解释是:预先调用处于队列状态的事件,直到全部处理完毕。通俗来说就是,在启动画面没显示完成之前,不要执行后面的界面ui绘制。最后,在主程序显示之后,调用dinish()结束启动画面。

#include "toolbox.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
//===静态程序启动画面===
    QPixmap pix(":/resource/splash1.png");
    QSplashScreen splash(pix);
    splash.show();
    a.processEvents();

    toolbox w;
    w.show();

    splash.finish(&w);//程序启动画面结束

    return a.exec();
}



2.动态启动画面
由于QSplashScreen默认使用QPixmap类型的数据作为参数,所以直接调用gif文件或视频文件是无效的。这里需要使用QMovie实现动态画面的播放。
首先还是要定义QPixmap和QSplashScreen,然后通过一个事件循环,让gif以指定速度刷新,然后将刷新的帧画面以pixmap的方式显示。这里要注意的就是gif的播放速度要与事件循环速度匹配。

#include "toolbox.h"
#include <QApplication>

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

//===动态程序启动画面===
    QPixmap pix(":/resource/splash2.gif");//这行代码加载了一个本地的GIF图片资源,它被用作Splash的背景
    QSplashScreen splash(pix);//使用QPixMap创建了一个QSplashScreen对象,这个对象通常用于显示一个临时的Splash窗口,通常在程序启动或进行某些耗时操作时显示
    QLabel splashlabel(&splash);//创建一个QLabel对象,他的父窗口是之前创建的QSplashScreen对象,这个标签将显示在Splash窗口上
    QMovie splashgif(":/resource/splash2.gif");//加载本地GIF动画资源
    splashlabel.setMovie(&splashgif);//将QLabel的movie设置为刚刚加载的GIF动画
    splashgif.start();//开始播放GIF
    splash.show();//显示Splash
    splash.setCursor(Qt::BlankCursor);//设置Splash窗口的鼠标光标样式为空白,也就是不显示鼠标外观
    for(int i=0;i<15000;i+=splashgif.speed()){//循环,使得程序等待Splash动画播放完毕
        QCoreApplication::processEvents();//循环每一次都调用QCoreApplication::processEvents()来处理Qt的事件队列
        Sleep(splashgif.speed()/5);//然后暂停一段时间
    }                                             //循环持续到动画播放结束

    toolbox w;
    w.show();

    splash.finish(&w);//程序启动画面结束

    return a.exec();
}

  • 21
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值