2013-05-31 15 views
11

Chcę wypakować QIcon, który zapisałem w jednym z kolumn QTreeWidget, jako Qt :: DecorationRole.QVariant to QIcon/QPixmap/QImage

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

Jednak mogę dostać tylko dane jak QVariant, i nie mogę znaleźć funkcji konwersji z QVariant do QIcon. Czy to możliwe?

Odpowiedz

20

OK, znaleziono odpowiedź w the docs for QVariant po dokładniejszym sprawdzeniu.

to działa:

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

Nie znaleźliśmy go natychmiast, ponieważ szukałem QIcon/QPixmap/QImage, i nie są one wymienione w ogóle, mam Szukano QColor zamiast :)

Uwagi na temat typów GUI

Ponieważ QVariant jest częścią biblioteki QtCore, nie może zapewnić funkcje konwersji do typów danych zdefiniowanych w QtGui, takich jak: QColor, QImage i QPixmap. Innymi słowy, nie ma funkcji toColor(). Zamiast tego można użyć funkcji szablonu QVariant::value() lub . Na przykład:

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

odwrotność konwersji (na przykład z QColor do QVariant) jest automatyczne wszystkie typy danych obsługiwane przez QVariant, w tym typów związanych z GUI:

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

W przypadku wątpliwości : To samo dotyczy dowolnego niestandardowego typu zadeklarowanego jako typ metastrowy i używanego w roli użytkownika. – leemes