svg、png、jpeg などのさまざまなファイル形式の画像を多数表示するアプリケーションがあります。アプリケーションをビルド環境で実行すると正常に動作しますが、ターゲット PC に展開すると、svg および png 画像のみが読み込まれ、その他の画像は QML 画像: サポートされていない画像形式になります。
画像オブジェクトはフォーム上にあります
Image {
id: jpgimage
source: images/jpgimage.jpg
}
Image {
id: pngimage
source: images/pngimage.png
}
Image {
id: svgimage
source: images/svgimage.svg
}
次のコマンドでアプリケーションをデプロイしています。
windeployqt --dir <my target folder> --qmldir <path the my project qml folder> <path to my executable>.exe --compiler-runtime
これにより、必要なライブラリのほとんどが読み込まれますが、Qt 固有ではないいくつかの不足している .dll ファイルも手動でコピーする必要があります。
ターゲット フォルダーには、次のファイルとフォルダーが含まれるようになりました。
my_app.log Qt5Widgets.dll* libharfbuzz-0.dll*
Qt/ Qt5WinExtras.dll* libiconv-2.dll*
Qt5Core.dll* QtGraphicalEffects/ libicudt68.dll*
Qt5Gui.dll* QtMultimedia/ libicuin68.dll*
Qt5Multimedia.dll* QtQml/ libicuuc68.dll*
Qt5MultimediaQuick.dll* QtQuick/ libintl-8.dll*
Qt5Network.dll* QtQuick.2/ libpcre-1.dll*
Qt5Qml.dll* QtQuick3D/ libpcre2-16-0.dll*
Qt5QmlModels.dll* QtTest/ libpng16-16.dll*
Qt5QmlWorkerScript.dll* QtWinExtras/ libstdc++-6.dll*
Qt5Quick.dll* my_app.exe* libwinpthread-1.dll*
Qt5Quick3D.dll* audio/ libzstd.dll*
Qt5Quick3DAssetImport.dll* bearer/ mediaservice/
Qt5Quick3DRender.dll* iconengines/ platforminputcontexts/
Qt5Quick3DRuntimeRender.dll* imageformats/ platforms/
Qt5Quick3DUtils.dll* libbrotlicommon.dll* playlistformats/
Qt5QuickControls2.dll* libbrotlidec.dll* qmltooling/
Qt5QuickShapes.dll* libbz2-1.dll* styles/
Qt5QuickTemplates2.dll* libdouble-conversion.dll* translations/
Qt5QuickTest.dll* libfreetype-6.dll* virtualkeyboard/
Qt5RemoteObjects.dll* libgcc_s_seh-1.dll* zlib1.dll*
Qt5Svg.dll* libglib-2.0-0.dll*
Qt5Test.dll* libgraphite2.dll*
そして私のimageformatsフォルダには
qgif.dll* qico.dll* qjpeg.dll* qtga.dll* qwbmp.dll*
qicns.dll* qjp2.dll* qsvg.dll* qtiff.dll* qwebp.dll*
これは Windows 10 PC で実行されており、これも mingw64 を使用して Windows 10 上に構築され、そこに msys2 経由で qt ライブラリがインストールされています。使用されている windeployqt 実行可能ファイルも mingw64 のものです。
ターゲット PC は新しくインストールされ、環境変数が設定されていません。アプリケーションが実行され、svg および png 画像が表示されますが、jpg 画像は表示されません。
デプロイされたアプリケーションが機能するようになるまでにいくつかの試行を行ったので、このプロセスで明らかな何かが欠けている可能性が非常に高いです。
*編集:ライブラリパスを出力するデバッグ出力も追加してみました:
qDebug() << "QCoreApplication::libraryPaths(): " << QCoreApplication::libraryPaths();
これにより、ターゲット フォルダー パス (アプリケーションとすべてのライブラリを含む上記のパス) が出力されました。