代码之家  ›  专栏  ›  技术社区  ›  Thomi

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

  •  9
  • Thomi  · 技术社区  · 16 年前

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

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

    我已经通过将其与qdir一起列出来验证是否加载了资源:

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

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

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

    一切正常。

    问题似乎是SVG插件从未被加载。我可以获得支持的图像类型列表,其中包含:

    (BMP、PBM、PGM、PNG、PPM、XBM、XPM)

    但没有提到SVG。

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

    编辑:

    问题似乎是我静态地链接到qt,因此插件都是静态libs。文件 QPluginLoader 声明:

    请注意,qPluginLoader不能 如果应用程序是静态的,则使用 与qt关联。在这种情况下,你 还必须链接到插件 静态地。你可以使用qlibrary如果 您需要在 静态链接的应用程序。

    然而,静态链接到这些插件似乎没有任何作用(支持的图像格式列表不会增长)。

    编辑2:

    另外,动态链接到qt(在重新构建整个应用程序之后)可以使上面的代码完美地工作。然而,我 希望 静态链接到qt,所以现在的问题更多的是在静态链接到qt时加载qt插件,而不是一般的图标。我将更新文章标题以反映这一点。

    2 回复  |  直到 9 年前
        1
  •  11
  •   MBach gregschlom    9 年前

    您需要使用Q_导入_插件。

    请参阅以下文档: https://doc.qt.io/qt-5/qtplugin.html#Q_IMPORT_PLUGIN

        2
  •  1
  •   mbx    15 年前

    根据 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