Иконки SVG не отображаются в сборке релиза Qt4 в Windows - PullRequest
9 голосов
/ 01 декабря 2010

У меня есть приложение Qt4 с иконками SVG, скомпилированное с помощью mingw (в windows), связанное с общими библиотеками Qt.

При запуске приложения значки SVG отображаются в сборках отладки и выпуска в Linux, однако в Windows значки SVG отображаются только в сборке отладки, но не в сборке выпуска.

Все значки SVG перечислены в project.qrc, а project.pro имеет RESOURCES = project.qrc. Приложение использует QtSvg4.dll (версия 4.7.0).

Qt 4.7.0, Qt Creator 2.0.1, mingw / g ++ 4.4.0.

Обновление решения: В каталоге приложения создайте / imageformats / directory и поместите туда qsvg4.dll вместо самого каталога приложения, либо создайте файл qt.conf с соответствующим путем. Больше информации в Развертывание плагинов .

Ответы [ 7 ]

8 голосов
/ 08 декабря 2010

Скорее всего, вам придется включить плагины из вашего каталога qt.Это включает создание файла qt.conf, который является локальным для вашего приложения (см. Здесь: http://doc.qt.io/qt-4.8/qt-conf.html, более конкретно, раздел [Пути]), и скопируйте c: \ Qt \ 4.xx \ plugins \ imageformats *.DLL в каталог вашего дистрибутива.

1 голос
/ 24 марта 2015

для Qt5

Начиная с Qt5, платформа была сильно модульной (Список модулей) . Скорее всего, вам не хватает модуля SVG. Приложение все равно будет компилироваться без жалоб. Убедитесь, что модуль SVG установлен в вашей системе и связан (с помощью qmake (Howto) , cmake (Howto) или обычного make). Если он был успешно связан, QImageReader :: supportImageFormats () выведет список SVG.

0 голосов
/ 13 мая 2019

Вы уже догадались: вот еще один способ избегать чтения документов , а вместо этого полагаться на дешевый совет из интернета.

Просто добавьте эту строку в свой app.pro!

QTPLUGINS += qsvg

В моем случае Qt статически связан с MSYS2, поэтому библиотеки плагинов даже не существуют.Но приложение все еще должно ссылаться в этом imageformats/qsvg коде плагина.Строка qmake выше - это самый простой способ сделать это;это преобразуется в g++ сегмент линии связи следующим образом:

g++ [...] -LC:/msys64/mingw64/qt5-static/share/qt5/plugins/imageformats \
          C:/msys64/mingw64/qt5-static/share/qt5/plugins/imageformats/libqsvg.a [...]
0 голосов
/ 12 декабря 2013

Похоже, проблема с Qt5.1 в Windows, вот как я решил ее для пользователей cmake:

Find_File(qtsvg NAMES "Qt5Svg.dll" PATHS ${QTBinBase}/.. PATH_SUFFIXES "bin" )
Find_File(qtxml NAMES Qt5Xml.dll PATHS ${QTBinBase}/.. PATH_SUFFIXES "bin" )
Find_File(qsvg NAMES "qsvg.dll" PATHS ${QTBinBase}/.. PATH_SUFFIXES "plugins/imageformats" )
Find_File(qsvgicon NAMES "qsvgicon.dll" PATHS ${QTBinBase}/.. PATH_SUFFIXES "plugins/iconengines" )

install(FILES ${qtsvg} ${qtxml} DESTINATION bin)
install(FILES ${qsvg} DESTINATION bin/plugins/imageformats)
install(FILES ${qsvgicon} DESTINATION bin/plugins/iconengines)

Это ручной способ, не красивый, но работает.QTBinBase Я получил еще один подвох:

get_target_property(QtCore_location Qt5::Core LOCATION)
get_filename_component(QtBinBase ${QtCore_location} PATH)
0 голосов
/ 20 ноября 2012

Если добавление Qt4Svg.dll и imageformats / qsvg4.dll не работает, убедитесь, что Qt4Xml.dll также включен в стандартную библиотеку DLL ядра, графического интерфейса пользователя и SVG.

Вот как ярешил это для меня.

Коротко: для рендеринга SVG-изображений вам необходимо включить XML-библиотеку aswell

0 голосов
/ 21 января 2011

Для моего приложения (Qt 4.6.3) я решил эту проблему, поместив подключаемый модуль dll (qsvgicon4.dll) в каталог с именем iconengines в каталоге приложения.

Пробовал другие решения - например, развертывание плагина в каталоге (в каталоге приложения) с именем imageformats с соответствующим qt.conf и без него, но без радости.

Примечание : Ранее я запускал приложение с dll Qt 4.7.0 и у меня не было проблем на той же целевой машине Win7.

0 голосов
/ 04 декабря 2010

Исходя из того, что вы сказали, вы делаете все, что нужно для его работы, поэтому для правильного ответа, скорее всего, потребуется дополнительная информация.Посмотрите, полезны ли вам эти ссылки:

http://lists.trolltech.com/qt-interest/2008-10/msg00655.html

http://www.qtcentre.org/archive/index.php/t-9036.html

В частности, убедитесь, что плагин SVG загружается с:

QImageReader::supportedImageFromats()

...