Ошибка Qt QMap.insert()

У меня есть объект levelObjects, который представляет собой QList QVariant of 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() ), я вижу, что она проходит через кучу ассемблерных подпрограмм, связанных с QVariant, затем проходит через QMap::insert(), затем еще немного ассемблера. Моя первоначальная мысль заключалась в том, что это могло вызвать какой-то сигнал, который приводит к выполнению кода в другом месте, но, похоже, это не так.

есть идеи?

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


person numegil    schedule 31.08.2011    source источник


Ответы (1)


На линии:

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

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

person Joe    schedule 31.08.2011
comment
А, это имеет смысл. Спасибо. - person numegil; 31.08.2011