Qt QMap.insert () не работает - PullRequest
       47

Qt QMap.insert () не работает

1 голос
/ 31 августа 2011

У меня есть объект levelObjects, который представляет собой QList из QVariants QMaps:

QList< QVariant > levelObjects;

Позже, когда я пытаюсь изменить значение чего-либо в одном из QMaps, кажется, чточто-нибудь:

qDebug() << "Before - " << levelObjects[id].toMap().value("x").toFloat() << ", newX = " << posX;
qDebug() << levelObjects[id].toMap();
QString stringNum = QString::number(posX);
levelObjects[id].toMap().insert("x", stringNum);
qDebug() << "After - " << levelObjects[id].toMap().value("x").toFloat();

производит:

Before -  207 , newX =  209.665 
QMap(("frame_name", QVariant(QString, "bumper.png") ) ( "height" ,  QVariant(QString, "25") ) ( "name" ,  QVariant(QString, "Bumper") ) ( "power" ,  QVariant(QString, "70") ) ( "rotation" ,  QVariant(QString, "0") ) ( "type" ,  QVariant(QString, "Bumper") ) ( "width" ,  QVariant(QString, "25") ) ( "x" ,  QVariant(QString, "207") ) ( "y" ,  QVariant(QString, "349") ) )  
After -  207 

Проходя через ошибочную строку кода (ту, что с .insert ()), я вижу, что она проходит через кучуподпрограммы сборки, связанные с QVariants, затем проходят через QMap :: insert (), а затем еще несколько сборок.Первоначально я думал, что это могло вызвать какой-то сигнал, который приводит к выполнению кода в другом месте, но это не так.

Есть мысли?

Редактировать:Я решил проблему с помощью обходного пути - избавления от промежуточного QVariant и наличия levelObjects как QList из QMaps.Однако мне все еще любопытно, есть ли у кого-нибудь понимание того, почему это происходит.

1 Ответ

3 голосов
/ 31 августа 2011

В строке:

levelObjects[id].toMap().insert("x", stringNum)

levelObjects[id].toMap() возвращает объект QMap, и вставка выполняется в возвращенном объекте QMap (не в исходном QVariant в списке levelObjects).

...