Я хочу извлечь QIcon, который я сохранил в одном из столбцов QTreeWidget, как Qt :: DecorationRole.
QTreeWidgetItem *item = ui->treeWidget->topLevelItem(index);
const QIcon &icon = item->data(0, Qt::DecorationRole)._howToConvert_();
Однако я могу получить данные только как QVariant и не могу найти функцию для преобразования из QVariant в QIcon. Возможно ли это сделать?
Ок, нашел ответ в документы для QVariant
после дальнейшего осмотра.
Это работает:
QImage image = variant.value<QImage>();
Я не нашел его сразу, потому что я искал QIcon / QPixmap / QImage, и они вообще не упоминаются, я должен был вместо этого искать QColor 🙂
Примечание о типах графического интерфейса
Так как
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;
Других решений пока нет …