在Qt4版本中没有显示SVG图标

我有一个带有SVG图标的Qt4应用程序,使用mingw编译(在Windows中),链接到Qt共享库。

运行应用程序时,SVG图标会显示在Linux中的debugging和发布版本中,但在Windows中,SVG图标仅在debugging版本中显示,而不在发布版本中显示。

所有SVG图标在project.qrc中列出, project.qrc RESOURCES = project.qrc 。 应用程序使用QtSvg4.dll(版本4.7.0)。

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

解决scheme更新:在应用程序目录中,创build/ imageformats /目录并将qsvg4.dllreplace为应用程序目录本身,或者使用适当的path创buildqt.conf文件。 有关部署插件的更多信息。

Solutions Collecting From Web of "在Qt4版本中没有显示SVG图标"

很可能你将不得不从你的qt目录中包含插件。 这涉及到对您的应用程序进行本地化的qt.conf文件(请参见http://doc.qt.io/qt-4.8/qt-conf.html ,更具体地说是[Paths]部分),并将c :\ Qt \ 4.xx \ plugins \ imageformats * .dll到你的可配置目录。

根据你所说的,你正在做所有需要的工作,所以一个正确的答案可能需要更多的信息。 看看这些链接是否对你有用:

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

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

特别是,确保SVG插件正在加载:

QImageReader::supportedImageFromats()

对于我的(Qt 4.6.3)应用程序,我通过将插件DLL(qsvgicon4.dll)放在应用程序目录中名为iconengines的目录中解决了这个问题。

尝试过其他的解决方案 – 比如将插件部署到名为imageformats的目录(在app目录中),并且没有适当的qt.conf,但没有喜悦。

注意 :我以前使用Qt 4.7.0 dll运行应用程序,并且在相同的Win7目标机器上没有问题。

对于Qt5

自Qt5以来,框架已经被大量模块化(模块列表) 。 很可能你错过了svg模块。 该应用程序仍然可以编译而不抱怨。 确保SVG模块安装在你的系统上,并链接到(使用qmake (Howto) ,cmake (Howto)或plain make)。 如果成功链接QImageReader :: supportedImageFormats()将列出SVG。

如果添加Qt4Svg.dll和imageformats / qsvg4.dll不起作用,请确保Qt4Xml.dll也包含在标准内核,gui和svg DLL中。

我就是这样解决这个问题的。

简而言之:要呈现svg图像,您还需要包含xml DLL

在Windows中,Qt5.1似乎仍然是一个问题,在这里我是如何为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)