Я использую вложенный QVariantMap и у меня проблема с определением метода, который принимает путь (список строк) и возвращает указатель на QVariantMaps низкого уровня:
QVariantMap * getQVariantMap( QStringList spec) const {
QVariantMap * deep_p = this->hash_p;
for( QStringList::const_iterator it = spec.begin();
it!= spec.end();
++it)
{
QVariantMap::const_iterator i = hash_p->find( *it);
if( i == hash_p->end())
return 0x00;
res_p = & i.value().toMap();
}
return res_p;
}
...
QVariantMap map, level1, level2;
level2["L2"] = "bazzinga!";
level1["L1"] = QVariant::fromValue( level2);
level1["foo"] = "foo";
map["L0"] = QVariant::fromValue( level1);
map["foo"] = "foo";
QStringList qsl;
qsl.append( "L1");
qsl.append( "L0");
QVariantMap * qvm = getQVariantMap( qsl);//pointer to level2 part of the nested QVariantMap.
qvm[ "foo"] = "baz";
//map[ "L0"].toMap()[ "L1"].toMap()[ "foo"] == "baz";
...
Я получил следующую ошибку:
taking address of temporary [-fpermissive]
и я знаю почему. Проблема в том, что мне нужно получить указатель на часть вложенной структуры, но я не могу получить ссылку на внутренности QVariant. Я попытался использовать data_ptr, предложенный в сообщении Назначение вложенному QVariantMap, но безуспешно. По очевидным причинам я не хочу делать специальные обертки для вставки/удаления/значения (поэтому, как я понял, принятый ответ в связанной теме не мой случай).
Я старался:
- хранить QPointer внутри QVariant -- безуспешно, потому что QVariant не является QObject;
- для хранения указателя с помощью QVariant::fromValue(QVariantMap *), но когда я вызываю toMap(), он возвращает QVariantMap, а не указатель, поэтому я снова получил адрес временной ошибки. И в любом случае, я не думаю, что это то, чего я хочу.
Как кто-то должен сделать это правильно?
res_p = new QVariantMap(i.value().toMap());
- person vahancho   schedule 10.07.2014new
в QVariant и QVariantMap или использовать типQVariant*
. Они должны передаваться по значению. - person Pavel Strakhov   schedule 11.07.2014new
, я ошибаюсь? - person Valentin T.   schedule 11.07.2014new
с помощью конструктора копирования. - person vahancho   schedule 11.07.2014