0

我有结构QMap<QString, QMap<QString, QString> > *map;

接下来我插入数据:

map = new QMap<QString,QMap<QString, QString> >;
QMap<QString,QString> *d = new QMap<QString, QString>;
d->insert("Name","Michal");
map->insert("QLineEdit",*d);

如果我尝试

QMapIterator<QString, QMap<QString, QString> > i(*mapa);
    while (i.hasNext()) {
        i.next();
        qDebug() << "Key: " << i.key() << " Value: " << i.value() << endl;

    }

我得到:

Key:  "QLineEdit"  Value:  QMap(("Name", "Michal")).

我如何Name获得KeyMichalValue

我试过了:

QMap<QString, QString> *p = new QMap<QString, QString>;
  *p = i.value();
  qDebug() << "Key: " << p->key() << " Value: " << p->value();

但它不起作用,我收到以下错误:

no matching function for call to 'QMap<QString, QString>::key()' qDebug()` << "Key: " << p->key() << " Value: " << p->value();
4

1 回答 1

2

在您的实现中,第一个地图包含一个内部地图(您的变量d)。

想象一下,你在d -map 中有另一个元素,比如 Age。然后你会添加另一个元素:

d->insert("Age", "42");

如果您现在只是尝试打印p->key()as 在您的尝试中,您将无法知道您将访问哪个“年龄”和“姓名”变量,因此您需要第二个迭代器。

如果你想打印这个内部映射的所有键和值,你可以创建一个新的迭代器来迭代第二个映射并获取并打印值:

QMapIterator<QString, QString > i2(i.value());
while (i2.hasNext()) {
  i2.next();
  qDebug() << "  Key: " << i2.key() << " Value: " << i2.value() << endl;
}

或者,您可以使用 .begin() 和 .end() 检查以“STL 方式”迭代内部映射:

QMap<QString, QString>::const_iterator i2;
for (i2 = i.value().begin(); i2 != i.value().end(); ++i2){
  qDebug() << "  Key: " << i2.key() << " Value: " << i2.value();
}
于 2014-12-02T22:17:00.880 回答