2013-05-31 21 views
11

Desidero estrarre un QIcon che ho memorizzato in una delle colonne di QTreeWidget, come Qt :: DecorationRole.QVariant to QIcon/QPixmap/QImage

QTreeWidgetItem *item = ui->treeWidget->topLevelItem(index); 
const QIcon &icon = item->data(0, Qt::DecorationRole)._howToConvert_(); 

Tuttavia, posso ottenere solo i dati come QVariant, e non riuscivo a trovare una funzione per convertire da un QVariant a QIcon. È possibile farlo?

risposta

20

OK, ha trovato la risposta in the docs for QVariant su ulteriore ispezione.

Questo funziona:

QImage image = variant.value<QImage>(); 

non ho trovato subito perché ho cercato QIcon/QPixmap/QImage, e non sono affatto menzionata, avrei cercato QColor invece :)

Una nota sui Tipi GUI

Perché QVariant fa parte della biblioteca QtCore, non può fornire funzioni di conversione per tipi di dati definiti in QtGui, come ad esempio QColor, QImage e QPixmap. In altre parole, non esiste la funzione toColor(). Invece, è possibile utilizzare la funzione modello QVariant::value() o qvariant_cast() . Per esempio:

QVariant variant; 
... 
QColor color = variant.value<QColor>(); 

La conversione inversa (ad esempio, da QColor a QVariant) è automatico per tutti i tipi di dati supportati da QVariant, inclusi i tipi GUI correlati:

QColor color = palette().background().color(); 
QVariant variant = color; 
+4

Nel caso in cui ti chiedi : Lo stesso vale per qualsiasi tipo personalizzato dichiarato come metatype e utilizzato in un ruolo utente. – leemes