QML Image: неподдерживаемый формат изображения для jpg при запуске развернутого приложения
У меня есть приложение, которое отображает множество изображений различных форматов файлов, таких как svg, png и jpeg. Мое приложение работает нормально, когда я запускаю его в своей среде сборки, но когда я развертываю его на целевом ПК, загружаются только изображения 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
Это загрузит большинство моих необходимых библиотек, но мне также придется вручную скопировать некоторые отсутствующие файлы .dll, которые не относятся к Qt.
В моей целевой папке теперь есть следующие файлы и папки:
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*
Он работает на ПК с Windows10, а также на Windows10 с использованием mingw64 и библиотеки qt, установленной там через msys2, а также используется исполняемый файл windeployqt из mingw64.
Целевой компьютер недавно установлен и не имеет заданных переменных среды, приложение запускается, и отображаются изображения svg и png, но не изображения jpg.
У меня было несколько попыток, прежде чем развернутое приложение заработало, поэтому весьма вероятно, что я упустил что-то очевидное в этом процессе.
*edit: Я также попытался добавить вывод отладки, печатающий пути к библиотеке:
qDebug() << "QCoreApplication::libraryPaths(): " << QCoreApplication::libraryPaths();
Это напечатало мой путь к целевой папке (тот, который выше, содержащий мое приложение и все библиотеки).
1 ответ
windeployq не перемещает все необходимые библиотеки времени выполнения, и мне не хватало двух файлов .dll для устранения всех проблем с библиотекой imageformats:
libdeflate.dll
libjpeg-8.dll
Первый был для tiff, второй - для jpeg и нескольких других вариантов.
Все остальные недостающие библиотеки после вызова windeployqt вызвали ошибку времени выполнения, кроме этих двух. Dependency Walker также не обнаружил пропажи этих двух.