5

QVariant(需要QSettings类)支持从创建QMap<QString, QVariant>

但试图初始化这样的东西:

QMap<QString, QVariant(QMap<QString, QVariant>)> i;

给出错误:

函数返回一个函数。

所以然后我尝试了QMap<QString, QVariant>重载QVariant()并得到了

错误:没有匹配的调用函数QVariant::QVariant(QMap<QString, QMap<QString, int> >&)

现在我尝试了一个类型转换:

QMap<QString, (QVariant)QMap<QString, QVariant> > i;

并得到

模板参数 2在 ' ' 标记
之前的声明中是无效的无效类型;

那么将嵌套转换QMapQVariant对象所需的巫术是什么?

4

2 回答 2

6
  1. QMap<QString, QVariant(QMap<QString, QVariant>)>中,您已经定义了从字符串到函数类型的映射。你真正想要的是一个QMap<QString, QVariant>.

  2. 你不想要 aQMap<QString,(QVariant)QMap<QString, QVariant> >因为那在语法上是不正确的。两个模板参数都必须是类型名称,并且 typecast 不能是 at 类型名称的一部分。

  3. 将 a QMap<QString, int>(或几乎任何其他类型的QMap)放入 a 是QVariant行不通的。唯一QMap可以转换为 a 的类型QVariant是 a QMap<QString,QVariant>

    这种类型有一个 typedef 可能有用:QVariantMap. 如果您坚持使用QVariantMap这种情况,那么一切都会为您正常工作。

于 2010-07-19T14:03:16.667 回答
4

报告的错误QVariant(...)不是类型,而是函数(c-tor)。

您应该刚刚使用:Map<QString, QVariant> i;并且QVariant(QMap<QString, QVariant>)仅在为地图分配值时使用。关键QVariant真的。所以 , 的地图QVariants可以int在一个位置有一个(包含在 中QVariant)而QDate在另一个位置有一个。所以在声明类型的时候,不能指定要QVariant持有哪些类型。

于 2010-07-19T13:51:29.847 回答