QVariant
(QSettings
类所需)支持从QMap<QString, QVariant>
创建
但是尝试初始化这样的事情:
QMap<QString, QVariant(QMap<QString, QVariant>)> i;
给出错误:
函数返回一个函数。
然后我尝试QMap<QString, QVariant>
的{{1}}重载并获得了
错误:没有匹配函数来调用
QVariant()
现在我尝试了一个类型转换:
QVariant::QVariant(QMap<QString, QMap<QString, int> >&)
得到了
模板参数2无效
“QMap<QString, (QVariant)QMap<QString, QVariant> > i;
”令牌之前的声明中的无效类型
那么将嵌套的;
转换为QMap
对象需要什么样的巫术呢?
答案 0 :(得分:6)
在QMap<QString, QVariant(QMap<QString, QVariant>)>
中,您已经定义了从字符串到函数类型的映射。你真正想要的是QMap<QString, QVariant>
。
您不需要QMap<QString,(QVariant)QMap<QString, QVariant> >
,因为这在语法上是不正确的。两个模板参数都需要是类型名称,并且类型转换不能是类型名称的一部分。
将QMap<QString, int>
(或几乎任何其他类型的QMap
)放入QVariant
将无效。唯一可以转换为QMap
的{{1}}类型是QVariant
。
这种类型的typedef可能很有用:QMap<QString,QVariant>
。如果您坚持使用QVariantMap
来解决这种情况,那么事情就会适合您。
答案 1 :(得分:4)
报告的错误是QVariant(...)
不是类型,而是函数(c-tor)。
您应该刚刚使用:Map<QString, QVariant> i;
并仅在为地图指定值时使用QVariant(QMap<QString, QVariant>)
。关键是QVariant
实际上是任何。因此,QVariants
的地图可以在一个位置int
(包含在QVariant
中)和QDate
在另一个位置。因此,在声明类型时,您无法指定要保留的QVariant
类型。