web-dev-qa-db-ja.com

QtのGIFアニメーション

次のようなウィジェットで画像を表示するために、QGraphicsViewQGraphicsSceneクラスを使用しました。

m_Scene->addPixmap(QPixmap(fileName));
m_View->setScene(m_Scene);

同じシーンで。gifアニメーションを表示するにはどうすればよいですか?

23
Narek

私はQGraphicsViewまたはQGraphicsSceneでGIFアニメーションを使用していません。QDialogでのみ使用していますが、同じものだと思うので、ここに私のコードを示します。

QMovie *movie = new QMovie(":/images/other/images/16x16/loading.gif");
QLabel *processLabel = new QLabel(this);
processLabel->setMovie(movie);
movie->start();

俺の loading.gifthis リンクから取得しました。


PS:Qt SDKの例も確認してください。彼らは本当に助けることができます!

73
mosg

私以外の誰かが同じ問題に遭遇した場合に備えて、これをここに置きます。

問題

GIFは読み込まれず、isValid()falseを返します。

コード

// Load animated GIF
QMovie* movie = new QMovie("foo.gif");

// Make sure the GIF was loaded correctly
if (!movie->isValid()) 
{
    // Something went wrong :(
}

// Play GIF
QLabel* label = new QLabel(this);
label->setMovie(movie);
movie->start(); 

ソリューション

これを解決するために、QtのGIFプラグインqgif4.dllimageformatsという名前のフォルダーに配置して、GIFを使用できるようにしました。

Dllは/plugins/imageformats/qgif4.dllの下にあります。

21
Adelost

http://doc.qt.io/qt-5/qmovie.html

グーグルとQtのドキュメントはあなたの友達です。 もあります。

PS:あなたが中国にいない限り、Googleにはアクセスできませんが、Bingや doc.qt.io.com のようなものがあります。

PS2:もう少し詳細な答えとして、QGraphicsProxyWidgetQLabelを使用してQMovieQLabel::setMovie経由で使用できます。それを行うには、おそらくより簡単/より短い方法があるでしょう。

3
rubenvb

リソースの適切なパスを次のコードのようにします

QMovie *movie=new QMovie(":/images/foo.gif");
if (!movie->isValid()) 
    {
     // Something went wrong :(
    }

// Play GIF
label=new QLabel(this);
label->setGeometry(115,60,128,128);
label->setMovie(movie);
movie->start();
1
Subrata Das