QT使用GIF作程序启动画面

来源:互联网 发布:node.js和python 编辑:程序博客网 时间:2024/05/16 15:30

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类,或者写一个外部程序让主程序调用。这几个方法我没有测试。

原创粉丝点击