QVariant到QIcon/QPixmap/QImage

sas*_*alm 13 c++ qt qvariant

我想提取一个存储在QTreeWidget列中的QIcon,如Qt :: DecorationRole.

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

但是,我只能将数据作为QVariant获取,而我找不到从QVariant转换为QIcon的函数.有可能吗?

sas*_*alm 24

好的,在文档中QVariant找到了答案,以便进一步检查.

这有效:

QImage image = variant.value<QImage>();
Run Code Online (Sandbox Code Playgroud)

我没有立即找到它,因为我搜索了QIcon/QPixmap/QImage,它们根本没有被提及,我应该搜索QColor而不是:)

关于GUI类型的注释

因为QVariant是QtCore库的一部分,它不能在QtGui定义的数据类型,如提供转换功能QColor, QImageQPixmap.换句话说,没有任何toColor()功能.相反,您可以使用QVariant::value()qvariant_cast() 模板功能.例如:

QVariant variant;
...
QColor color = variant.value<QColor>();
Run Code Online (Sandbox Code Playgroud)

对于所支持的所有数据类型,包括与GUI相关的类型,逆转换(例如,从QColorQVariant)是自动的QVariant:

QColor color = palette().background().color();
QVariant variant = color;
Run Code Online (Sandbox Code Playgroud)

  • 如果您想知道:对于任何自定义类型,您都声明为元类型并在用户角色中使用. (4认同)