QT提供了QSplashScreen类,我们可以使用此类给QT程序添加启动画面。但是此类只可以加载jpg等静态图像。
如果我们需要播放gif图像,一般使用QMoive:
QLabel label; QMovie *movie = new QMovie("animations/fire.gif"); label.setMovie(movie); movie->start();
但是使用gif作为启动画面是有问题的。因为当程序启动的时候线程正在执行一些初始化操作,无法处理QMovie的events,所以只会显示第一帧的画面。
解决这个问题的方法就是适当的调用
qApp->processEvents();
调用这个函数可以处理事件。但这也不是解决办法,因为究竟调用多少次才合适呢?
我使用了这个方法
#include <QtGui>
#include <time.h>
#include "tests.h"
void MainSleep(unsigned msec)
{
clock_t start = clock();
while(true)
{
clock_t diff = clock()-start;
if(diff > msec) return;
qApp->processEvents();
}
}
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QTextCodec::setCodecForTr(QTextCodec::codecForName("GBK"));
QMovie *movie=new QMovie("Resources/generator.gif");
QLabel label;
label.setMovie(movie);
movie->start();
label.show();
qApp->processEvents();
qApp->processEvents();
MainSleep(800);
tests window;
qApp->processEvents();
MainSleep(800);
window.show();
label.close();
return app.exec();
}
但是在进行复杂初始化的时候,图片还是会暂停下来。
其他办法就是开辟新的线程,重写QSplashScreen类,或者写一个外部程序让主程序调用。这几个方法我没有测试。