QVariant для QIcon/QPixmap/QImage

Я хочу извлечь QIcon, который я сохранил в одном из столбцов QTreeWidget, в качестве Qt:: DecorationRole.

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

Однако я могу получить данные только как QVariant, и я не смог найти функцию для преобразования из QVariant в QIcon. Можно ли это сделать?

Ответ 1

ОК, нашла ответ в документы для QVariant при дальнейшем осмотре.

Это работает:

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

Я не нашел его сразу, потому что искал QIcon/QPixmap/QImage, и они вообще не упоминаются, я должен был искать QColor вместо:)

Примечание о типах GUI

Поскольку QVariant является частью библиотеки QtCore, он не может предоставить функции преобразования в типы данных, определенные в QtGui, такие как QColor, QImage и QPixmap. Другими словами, нет функции toColor(). Вместо этого вы можете использовать QVariant::value() или qvariant_cast()функция шаблона. Например:

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

Обратное преобразование (например, от QColor до QVariant) является автоматическим для все типы данных, поддерживаемые QVariant, включая типы, связанные с GUI:

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