2013-05-31 15 views
11

Ich möchte ein QIcon extrahieren, das ich in einer der Spalten eines QTreeWidget gespeichert habe, als Qt :: DecorationRole.QVariant zu QIcon/QPixmap/QImage

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

Allerdings kann ich nur die Daten als QVariant bekommen, und ich konnte nicht eine Funktion zur Umwandlung von einem QVariant zu QIcon finden. Ist es möglich, es zu tun?

Antwort

20

OK, fand die Antwort in the docs for QVariant bei weiterer Inspektion.

Dies funktioniert:

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

ich es nicht sofort gefunden, weil ich für QIcon/QPixmap/QImage gesucht, und sie sind nicht erwähnt, sollte ich für QColor stattdessen gesucht :)

Ein Hinweis auf GUI-Typ

Da QVariant Teil der QtCore Bibliothek ist, kann es nicht liefern Konvertierungsfunktionen zu den in QtGui definierten Datentypen wie QColor, QImage und QPixmap. Mit anderen Worten, es gibt keine toColor() Funktion. Stattdessen können Sie die Vorlagenfunktion QVariant::value() oder qvariant_cast() verwenden. Zum Beispiel:

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

die inverse Umwandlung (zB von QColor bis QVariant) für alle Datentypen unterstützt von QVariant, einschließlich GUI-bezogenen Typen automatisch ist:

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

Falls Sie sich fragen, : Dasselbe gilt für jeden benutzerdefinierten Typ, den Sie als Metatyp deklarieren und in einer Benutzerrolle verwenden. – leemes

Verwandte Themen