QSplashScreen是Qt框架提供的一个类,用于在应用程序启动时显示一个带有文本和图像的启动画面(Splash Screen)。
使用QSplashScreen类,你可以在应用程序启动时显示一个自定义的启动画面,以提供更好的用户体验。这个类提供了一些方法和属性,可以让你设置启动画面的文本、图像和其他样式。
启动画面有两种,一种是静态启动画面,即运行程序显示一个界面(一张图片),显示结束后关闭程序界面。另一种是动态画面,即运行程序显示一个动态画面,通常是一段视频、或一个gif格式图片,播放结束后运行程序。
QSplashScreen类构造函数默认传入QPixMap类型的参数,因此,静态启动和动态启动所需要的画面都需要借助QPixMap类。下图是QSplashScreen类的构造函数详情:
1.静态启动画面
首先用QPixMap加载图像,然后传入QPixMap作为参数创建一个QSplashScreen类,调用show()显示。在show()之后调用QApplication::processEvents()。关于processEvents事件循环,文档解释是:预先调用处于队列状态的事件,直到全部处理完毕。通俗来说就是,在启动画面没显示完成之前,不要执行后面的界面ui绘制。最后,在主程序显示之后,调用dinish()结束启动画面。
1 #include "toolbox.h" 2 #include <QApplication> 3 4 int main(int argc, char *argv[]) 5 { 6 QApplication a(argc, argv); 7 //===静态程序启动画面=== 8 QPixmap pix(":/resource/splash1.png"); 9 QSplashScreen splash(pix); 10 splash.show(); 11 a.processEvents(); 12 13 toolbox w; 14 w.show(); 15 16 splash.finish(&w);//程序启动画面结束 17 18 return a.exec(); 19 }
2.动态启动画面
由于QSplashScreen默认使用QPixmap类型的数据作为参数,所以直接调用gif文件或视频文件是无效的。这里需要使用QMovie实现动态画面的播放。
首先还是要定义QPixmap和QSplashScreen,然后通过一个事件循环,让gif以指定速度刷新,然后将刷新的帧画面以pixmap的方式显示。这里要注意的就是gif的播放速度要与事件循环速度匹配。
1 #include "toolbox.h" 2 #include <QApplication> 3 4 int main(int argc, char *argv[]) 5 { 6 QApplication a(argc, argv); 7 8 //===动态程序启动画面=== 9 QPixmap pix(":/resource/splash2.gif");//这行代码加载了一个本地的GIF图片资源,它被用作Splash的背景 10 QSplashScreen splash(pix);//使用QPixMap创建了一个QSplashScreen对象,这个对象通常用于显示一个临时的Splash窗口,通常在程序启动或进行某些耗时操作时显示 11 QLabel splashlabel(&splash);//创建一个QLabel对象,他的父窗口是之前创建的QSplashScreen对象,这个标签将显示在Splash窗口上 12 QMovie splashgif(":/resource/splash2.gif");//加载本地GIF动画资源 13 splashlabel.setMovie(&splashgif);//将QLabel的movie设置为刚刚加载的GIF动画 14 splashgif.start();//开始播放GIF 15 splash.show();//显示Splash 16 splash.setCursor(Qt::BlankCursor);//设置Splash窗口的鼠标光标样式为空白,也就是不显示鼠标外观 17 for(int i=0;i<15000;i+=splashgif.speed()){//循环,使得程序等待Splash动画播放完毕 18 QCoreApplication::processEvents();//循环每一次都调用QCoreApplication::processEvents()来处理Qt的事件队列 19 Sleep(splashgif.speed()/5);//然后暂停一段时间 20 } //循环持续到动画播放结束 21 22 toolbox w; 23 w.show(); 24 25 splash.finish(&w);//程序启动画面结束 26 27 return a.exec(); 28 }
标签:Qt,启动,gif,画面,splash,Splash,QSplashScreen From: https://www.cnblogs.com/ybqjymy/p/18204335