QT GIFを使用したプログラム起動画面


QTはQSplashScreenクラスを提供し、このようなQTプログラムに起動画面を追加することができます.ただし、jpgなどの静的画像のみをロードできます.
gif画像を再生する必要がある場合は、一般的にQMoiveを使用します.
 QLabel label;
 QMovie *movie = new QMovie("animations/fire.gif");

 label.setMovie(movie);
 movie->start();

ただしgifを起動画面として使用するのは問題あります.プログラム起動時にスレッドが初期化操作を行っているため、QMovieのeventsを処理できないため、第1フレームの画面のみが表示されます.
この問題を解決する方法は適切な呼び出しである.
qApp->processEvents();
この関数を呼び出すと、イベントを処理できます.しかし、これも解決策ではありません.いったい何回呼び出すのが適切なのでしょうか.
私はこの方法を使った.
 
#include
#include
#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クラスを書き換えるか、外部プログラムを書いてメインプログラムを呼び出すことです.このいくつかの方法はテストしていません.