如何将QMap <QString,QMap <QString,int >>转换为QVariant?

fen*_*nix 5 c++ nested qt4 qvariant qmap

QVariant(QSettings课堂所需)支持创作QMap<QString, QVariant>

但试图初始化这样的事情:

QMap<QString, QVariant(QMap<QString, QVariant>)> i;
Run Code Online (Sandbox Code Playgroud)

给出错误:

函数返回一个函数.

那么我尝试了QMap<QString, QVariant>重载QVariant()并得到了

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

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

QMap<QString, (QVariant)QMap<QString, QVariant> > i;
Run Code Online (Sandbox Code Playgroud)

得到了

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

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

Ken*_*oom 6

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

  2. 你不想要一个QMap<QString,(QVariant)QMap<QString, QVariant> >因为那只是语法不正确.两个模板参数都需要是类型名称,并且类型名称不能成为类型名称的一部分.

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

    这种类型的typedef可能很有用:QVariantMap.如果您坚持使用QVariantMap这种情况,那么事情将适合您.


Gia*_*nni 4

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

您应该只使用:Map<QString, QVariant> i;并且QVariant(QMap<QString, QVariant>)仅在为地图分配值时使用。重点是任何事情QVariant都是真的。因此 , 的地图可以在一个位置(包含在)中具有,在另一个位置中具有 。因此,在声明类型时,您无法指定要保存哪些类型。QVariantsintQVariantQDateQVariant