如何将 QMap 转换为 QMap >到 QVariant?
QVariant
(QSettings
类所需)支持从 QMap
创建,
但尝试初始化如下内容:
QMap<QString, QVariant(QMap<QString, QVariant>)> i;
给出错误:
函数返回一个函数。
然后我尝试了 QMap
重载 QVariant()
并得到了
错误:没有匹配的函数可调用
QVariant::QVariant(QMap
>&)
现在我尝试了类型转换:
QMap<QString, (QVariant)QMap<QString, QVariant> > i;
并得到了
模板参数 2 无效
“;
”标记之前的声明中的类型无效
那么将嵌套的 QMap
转换为 QVariant
对象所需的巫术是什么?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
在
QMap)>
中,您定义了从字符串到函数类型的映射。您真正想要的是QMap
。你不想要一个
QMap; >
因为这在语法上是不正确的。两个模板参数都需要是类型名称,并且类型转换不能是类型名称的一部分。将
QMap
(或几乎任何其他类型的QMap
)放入QVariant
中是行不通的。唯一可以转换为QVariant
的QMap
类型是QMap
。此类型的 typedef 可能有用:
QVariantMap
。如果您在这种情况下坚持使用QVariantMap
,那么一切都会为您正常工作。In
QMap<QString, QVariant(QMap<QString, QVariant>)>
, you have defined a map from a string to a function type. What you really want is aQMap<QString, QVariant>
.You don't want a
QMap<QString,(QVariant)QMap<QString, QVariant> >
because that's just syntactically incorrect. Both template parameters need to be type names, and typecast can't be part of at type name.Putting a
QMap<QString, int>
(or almost any other type ofQMap
) into aQVariant
won't work. The onlyQMap
type that can be converted into aQVariant
is aQMap<QString,QVariant>
.There's a typedef for this type that may be useful:
QVariantMap
. If you stick to usingQVariantMap
for this situation, then things will work properly for you.报告的错误是
QVariant(...)
不是类型,而是函数 (c-tor)。您应该刚刚使用:
Map; i;
并仅在为映射赋值时使用QVariant(QMap)
。关键是QVariant
确实是任何东西。因此,QVariants
的映射可以在一个位置有一个int
(包含在QVariant
中)和一个QDate
在另一个。因此,在声明类型时,您无法指定希望 QVariant 保存哪些类型。The error being reported is that
QVariant(...)
is not a type, but a function (c-tor).You should have just used:
Map<QString, QVariant> i;
and usedQVariant(QMap<QString, QVariant>)
only when assigning values to the map. The point isQVariant
is anything really. So a map ofQVariants
, can have anint
in one position (contained in theQVariant
) and aQDate
in another. So when declaring the type, you can't specify which types you wantQVariant
to hold.