2009-10-02 16 views
9

Ich versuche SVG-Grafiken in QIcons zu verwenden. Ich habe eine statische Bibliothek, die alle meine Grafikressourcen enthält, und eine Methode in dieser statischen Bibliothek, die QIcons zurückgibt, die mit den richtigen Grafiken vorinstalliert sind. Ich versuche, dies zu tun:Laden von Qt-Plugins beim statischen Verbinden mit Qt?

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

Ich habe festgestellt, dass diese Ressourcen durch die Auflistung mit QDir geladen sind:

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

Allerdings ist das SVG-Symbol nicht angezeigt wird. Wenn ich den Icon Ladecode zu diesem ändern:

alles funktioniert einwandfrei.

Das Problem scheint zu sein, dass das SVG-Plugin nie geladen wird. Ich kann eine Liste der unterstützten Bildtypen, die enthält:

("bmp", "pbm", "pgm", "png", "ppm", "xbm", "XPM")

aber keine Erwähnung von SVG.

Ich habe sichergestellt, dass ich das SVG-Modul sowohl in meiner statischen Bibliothek. PRO-Datei und meine Hauptanwendung. PRO-Datei verwenden.

Edit:

Es scheint, das Problem ist, dass ich statisch Qt bin Verknüpfung und damit die Plugins sind alle statischen Libs. Die Dokumentation für QPluginLoader heißt es:

Beachten Sie, dass die QPluginLoader kann nicht verwendet werden, wenn Ihre Anwendung statisch gegen Qt verbunden ist. In diesem Fall müssen Sie auch statisch mit den Plugins verknüpfen. Sie können QLibrary verwenden, wenn Sie dynamische Bibliotheken in eine statisch verknüpfte Anwendung laden müssen.

Noch statische Verknüpfung zu diesen Plugins scheint nichts zu tun (die Liste der unterstützten Bildformate wächst nicht).

Edit2:

Auch dynamisch Qt Verknüpfung (nach meiner ganzen App Wiederaufbau) macht den Code oben arbeiten perfekt. Allerdings möchte ich statische Verbindung zu Qt, so dass die Frage jetzt mehr über das Laden von Qt-Plugins bei der statischen Verbindung zu Qt und weniger über Symbole im Allgemeinen aussieht. Ich werde den Posttitel aktualisieren, um dies zu reflektieren.

Antwort

1

Nach documentation, die Art und Weise ein SVG-Symbol zu laden ist:

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

Für Ihr Link Problem, QtSvg Teil von Qt ist, so brauchen Sie nicht es als Plugin hinzuzufügen. Zum Kompilieren mit SVG-Unterstützung ist nur Folgendes erforderlich:

QT += svg 
+0

Für normale Anwendungen, ja. Symbole sind jedoch unterschiedlich. Die QIcon-Dokumentation (http://doc.trolltech.com/4.5/qicon.html) weist darauf hin, dass Sie mit der SVG-Icon-Engine SVG-Bilder direkt in QIcons laden können. Andere Leute haben diese Arbeit auch gehabt (http://lists.trolltech.com/qt-interest/2008-07/thread00105-0.html) gerade nicht in einem statischen Kontext. – Thomi

+0

Entschuldigung, ich habe gerade festgestellt, dass der obige Kommentar nicht eindeutig ist. "Anwendungen" im ersten Satz ist wie in "verwendet" gemeint, nicht wie in "Anwendungsprogramme". – Thomi

Verwandte Themen