QT GIFを使用したプログラム起動画面
QTはQSplashScreenクラスを提供し、このようなQTプログラムに起動画面を追加することができます.ただし、jpgなどの静的画像のみをロードできます.
gif画像を再生する必要がある場合は、一般的にQMoiveを使用します.
ただし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クラスを書き換えるか、外部プログラムを書いてメインプログラムを呼び出すことです.このいくつかの方法はテストしていません.
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クラスを書き換えるか、外部プログラムを書いてメインプログラムを呼び出すことです.このいくつかの方法はテストしていません.