静态链接到Qt时加载Qt插件?

时间:2009-10-02 08:32:25

标签: c++ qt qt4 svg icons

我正在尝试在QIcons中使用SVG图形。我有一个静态库,其中包含我的所有图形资源,以及该静态库中的一个方法,该方法返回预先加载了正确图形的QIcons。我正在尝试这样做:

QIcon icon(":/icons/find.svg");

我已通过使用QDir列出已加载资源:

qDebug() << QDir(":/icons/").entryList();

但是,未显示SVG图标。当我将图标加载代码更改为:

QIcon icon(":/icons/find.png");

一切正常。

问题似乎是SV​​G插件永远不会被加载。我可以获得支持的图像类型列表,其中包含:

  

(“bmp”,“pbm”,“pgm”,“png”,“ppm”,“xbm”,“xpm”)

但没有提到SVG。

我确保在静态库.pro文件和我的主应用程序.pro文件中使用SVG模块。

修改

似乎问题是我静态链接到Qt,因此插件都是静态库。 QPluginLoader的文档声明:

  

请注意,QPluginLoader不能   如果您的应用程序是静态的,请使用   与Qt联系在一起。在这种情况下,你   还必须链接到插件   静态。您可以使用QLibrary   你需要加载动态库   静态链接的应用程序。

然而静态链接到这些插件似乎什么都不做(支持的图像格式列表不会增长)。

EDIT2:

此外,动态链接到Qt(在重建我的整个应用程序之后)使上面的代码完美地运行。但是,我希望静态链接到Qt,因此现在的问题更多地是关于在静态链接到Qt时加载Qt插件而不是一般情况下更少关于图标。我会更新帖子标题以反映这一点。

2 个答案:

答案 0 :(得分:11)

您需要使用Q_IMPORT_PLUGIN。

请参阅此处的文档:https://doc.qt.io/qt-5/qtplugin.html#Q_IMPORT_PLUGIN

答案 1 :(得分:1)

根据documentation,加载svg图标的方法是:

QSvgRenderer svgRenderer( ":/icons/find.svg" );
Q_ASSERT( svgRenderer.isValid());

QImage img( svgRenderer.defaultSize() );
QPainter p( &img );
svgRenderer.render( &p );
p.end();

QIcon icon( QPixmap::fromImage( img ) );

对于您的链接问题,QtSvg是Qt的一部分,因此您无需将其添加为插件。使用SVG支持编译所需的唯一内容是:

QT += svg