如何转换QMap <qstring,qmap <qstring,=“”int =“”>&gt;到QVariant?</qstring,>

时间:2010-07-19 13:41:15

标签: c++ qt4 nested qvariant qmap

QVariantQSettings类所需)支持从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对象需要什么样的巫术呢?

2 个答案:

答案 0 :(得分:6)

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

  2. 您不需要QMap<QString,(QVariant)QMap<QString, QVariant> >,因为这在语法上是不正确的。两个模板参数都需要是类型名称,并且类型转换不能是类型名称的一部分。

  3. 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类型。