2009-10-02 19 views
9

Estoy tratando de usar gráficos SVG en QIcons. Tengo una biblioteca estática que contiene todos mis recursos gráficos y un método en esa biblioteca estática que devuelve QIcons precargados con los gráficos correctos. Estoy tratando de hacer esto:Cargando complementos Qt al enlazar a Qt estáticamente?

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

He comprobado que los recursos que se ha cargado enumerando con QDir:

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

Sin embargo, no está siendo mostrado el icono SVG. Cuando cambio el código de carga del icono a este:

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

todo funciona correctamente.

El problema parece ser que el complemento SVG nunca se carga. Puedo obtener una lista de tipos de imagen compatibles, que contiene:

("BMP", "PBM", "PGM", "png", "ppm", "xbm", "xpm")

pero no se menciona SVG.

Me he asegurado de estar utilizando el módulo SVG en mi archivo .pro de biblioteca estática y en mi archivo .pro de aplicación principal.

Editar:

Parece que el problema es que estoy ligarse a Q t estáticamente, y por lo tanto los plugins son todas las librerías estáticas. La documentación para QPluginLoader establece que:

Tenga en cuenta que la QPluginLoader no puede ser utilizado si su aplicación es estáticamente vinculado en Qt. En este caso, usted también tendrá que enlazar a los complementos estáticamente. Puede usar QLibrary si necesita cargar bibliotecas dinámicas en una aplicación enlazada estáticamente.

Sin embargo, el enlace estático con estos complementos parece no hacer nada (la lista de formatos de imagen compatibles no crece).

Edit2:

también, que une a Q t dinámicamente (después de reconstruir toda mi aplicación) hace que el código anterior funcionan a la perfección. Sin embargo, I quiere para enlazar a Qt estáticamente, por lo que la pregunta ahora parece ser más sobre cargar complementos de Qt cuando se enlaza a Qt estáticamente y menos sobre íconos en general. Actualizaré el título de la publicación para reflejar esto.

Respuesta

1

Según documentation, la forma de cargar un icono SVG es:

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)); 

para su problema de enlace, QtSvg es parte de Qt, por lo que no es necesario para agregarlo como un plugin. Lo único necesario para compilar con soporte SVG es:

QT += svg 
+0

Para aplicaciones normales, sí. Sin embargo, los iconos son diferentes. Los documentos QIcon (http://doc.trolltech.com/4.5/qicon.html) sugieren que con el motor de iconos svg debería poder cargar imágenes SVG directamente en QIcons. Otras personas han tenido este trabajo también (http://lists.trolltech.com/qt-interest/2008-07/thread00105-0.html) simplemente no en un contexto estático. – Thomi

+0

Lo siento, me acabo de dar cuenta de que el comentario anterior es ambiguo. "aplicaciones" en la primera oración se entiende como "usos", no como en "programas de aplicación". – Thomi