2014-11-20 30 views
10

Ho il seguente codice e devo cambiarlo con il codice Qt4.Come convertire QIcon in QPixmap

QIcon icon; 
QPixmap pixmap = icon.pixmap(); // Qt3 code 

per sostituire il codice Qt3 con Qt4, è necessario sostituire pixmap() con uno dei seguenti metodi forniti dalla Qt4.

QPixmap QIcon::pixmap (const QSize & size, Mode mode = Normal, State state = Off) const 
QPixmap QIcon::pixmap (int w, int h, Mode mode = Normal, State state = Off) const 
QPixmap QIcon::pixmap (int extent, Mode mode = Normal, State state = Off) const 

Dal momento che non conoscere che formato e dimensione si sta usando in questa chiamata di pixmap(void). Quindi ho bisogno di trovare un'alternativa che possa eliminare questo codice senza chiedere esplicitamente dimensioni.

Cosa ho capito da questo segmento di codice. Sta prendendo le dimensioni dell'icona. Così provo a scoprire la dimensione dell'icona. Ma di nuovo non trovo alcun metodo per ottenere la dimensione dell'icona.

+0

Esistono metodi statici 'QIcon :: pixmap()' per questo (da [documentazione] (http://qt-project.org/doc/qt-4.8/qicon.html)) –

+0

Hai visto la documentazione QIcon ? http://qt-project.org/doc/qt-5/qicon.html – JKSH

+0

fare riferimento nuovamente alla domanda. L'ho aggiornato per ulteriori descrizioni. – Jai

risposta

18

QIcon può contenere più immagini con dimensioni diverse, una genericaicon.pixmap() è troppo arbitraria (che il formato sarà utilizzato per costruire QPixmap?). pixmap() method è ancora disponibile ma devi specificare quale dimensione desideri.

Se sai dimensione allora si può semplicemente utilizzare:

QPixmap pixmap = icon.pixmap(requiredImageSize); 

Se non lo fai (come nel tuo caso), allora avete alcune alternative. Innanzitutto è possibile richiedere un'immagine con una dimensione specificata (o inferiore) utilizzando il metodo QIcon::actualSize().

QPixmap pixmap = icon.pixmap(icon.actualSize(QSize(32, 32))); 

Suppsing icon contiene 16x16, 24x24 e 64x64 poi tornerà 24x24 (immagine più grande piccolo di quello che è stato specificato).

seconda alternativa è quella di scegliere il più grande immagine disponibile (larghezza assumendo e l'altezza sono sempre uguali) dimensioni interrogazione utilizzando QIcon::availableSizes():

QList<QSize> sizes = icon.availableSizes(); 
int maximum = sizes[0].width(); 
for (int i=1; i < sizes.size(); ++i) 
    maximum = qMax(maximum, sizes[i].width()); 

QPixmap pixmap = icon.pixmap(QSize(maximum, maximum)); 

Si noti che se si utilizza primo metodo e si specifica un valore abbastanza grande, allora si' ll avere lo stesso risultato:

QPixmap pixmap = icon.pixmap(icon.actualSize(QSize(1024, 1024))); 

Naturalmente si può anche semplicemente prendere prima/ultima dimensione disponibile:

QPixmap pixmap = icon.pixmap(icon.availableSizes().first()); 
QPixmap pixmap = icon.pixmap(icon.availableSizes().last()); 
3

Esistono diversi metodi descritti nello QIcon reference documentation. Per esempio

QPixmap QIcon::pixmap(const QSize & size, Mode mode = Normal, State state = Off) 

dove devi solo fornire la dimensione del risultato desiderato.