2009-10-02 6 views
9

Sto provando a utilizzare la grafica SVG in QIcons. Ho una libreria statica che contiene tutte le mie risorse grafiche e un metodo in quella libreria statica che restituisce QIcons precaricato con la grafica corretta. Sto cercando di fare questo:Caricamento di plugin Qt durante il collegamento statico a Qt?

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

Ho verificato che le risorse che è stata eseguita elencando con QDir:

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

Tuttavia, l'icona SVG è non viene mostrato. Quando cambio il codice di caricamento delle icone su questo:

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

tutto funziona correttamente.

Il problema sembra essere che il plug-in SVG non viene mai caricato. Posso ottenere un elenco dei tipi di immagine supportati, che contiene:

("bmp", "PBM", "PGM", "png", "ppm", "xbm", "XPM")

ma senza menzione di SVG.

Mi sono assicurato che sto usando il modulo SVG sia nel mio file .pro della libreria statica che nel mio file .pro dell'applicazione principale.

Edit:

Sembra che il problema è che stanno collegando a Qt staticamente, e quindi i plugin sono tutte le librerie statiche. La documentazione per QPluginLoader afferma che:

Si noti che il QPluginLoader non può essere utilizzato se l'applicazione è staticamente legato contro Qt. In questo caso, l'utente dovrà anche collegarsi ai plug-in staticamente. È possibile utilizzare QLibrary se è necessario caricare le librerie dinamiche in un'applicazione collegata in modo statico.

Eppure il collegamento statico a questi plugin sembra non fare nulla (l'elenco dei formati di immagine supportati non cresce).

Edit2:

Inoltre, il collegamento a Qt in modo dinamico (dopo la ricostruzione tutta la mia app) rende il codice di cui sopra lavoro perfettamente. Tuttavia, I desidera collegarsi a Qt in modo statico, quindi la domanda sembra essere più sul caricamento dei plugin Qt quando si collega a Qt staticamente e meno sulle icone in generale. Aggiornerò il titolo del post per riflettere questo.

risposta

1

Secondo documentation, il modo per caricare l'icona di un file 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)); 

per il vostro problema di collegamento, QtSvg fa parte di Qt, quindi non c'è bisogno di aggiungere come plugin. L'unica cosa necessaria per compilare con il supporto SVG è:

QT += svg 
+0

per applicazioni normali, sì. Tuttavia, le icone sono diverse. I documenti QIcon (http://doc.trolltech.com/4.5/qicon.html) suggeriscono che con il motore di icone svg dovresti essere in grado di caricare immagini SVG direttamente in QIcons. Anche altre persone hanno avuto questo lavoro (http://lists.trolltech.com/qt-interest/2008-07/thread00105-0.html) non in un contesto statico. – Thomi

+0

Mi spiace, ho appena realizzato che il commento sopra è ambiguo. le "applicazioni" nella prima frase sono intese come "usi", non come nei "programmi applicativi". – Thomi