次のようなウィジェットで画像を表示するために、QGraphicsView
、QGraphicsScene
クラスを使用しました。
m_Scene->addPixmap(QPixmap(fileName));
m_View->setScene(m_Scene);
同じシーンで。gifアニメーションを表示するにはどうすればよいですか?
私は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.gif
this リンクから取得しました。
PS:Qt SDKの例も確認してください。彼らは本当に助けることができます!
私以外の誰かが同じ問題に遭遇した場合に備えて、これをここに置きます。
問題
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.dll
をimageformats
という名前のフォルダーに配置して、GIFを使用できるようにしました。
Dllは/plugins/imageformats/qgif4.dll
の下にあります。
http://doc.qt.io/qt-5/qmovie.html
グーグルとQtのドキュメントはあなたの友達です。 例 もあります。
PS:あなたが中国にいない限り、Googleにはアクセスできませんが、Bingや doc.qt.io.com のようなものがあります。
PS2:もう少し詳細な答えとして、QGraphicsProxyWidget
のQLabel
を使用してQMovie
をQLabel::setMovie
経由で使用できます。それを行うには、おそらくより簡単/より短い方法があるでしょう。
リソースの適切なパスを次のコードのようにします
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();