Qt QMap.insert() failing
I have a levelObjects object that's a QList of QVariants of QMaps:
QList< QVariant > levelObjects;
Later on, when I try to change the value of something in one of the QMaps, it does开发者_Go百科n't seem to do anything:
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();
produces:
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
Stepping through the offending line of code (the one with the .insert() ), I can see that it goes through a bunch of assembly subroutines related to QVariants, then goes through QMap::insert(), then some more assembly. My initial thought was that this might have been triggering some sort of signal which results in code elsewhere being executed, but that doesn't appear to be the case.
Any thoughts?
Edit: I solved the problem through a workaround - getting rid of the intermediate QVariant and having levelObjects be a QList of QMaps. However, I'm still curious if anyone has any insight as to why this was happening.
On the line:
levelObjects[id].toMap().insert("x", stringNum)
levelObjects[id].toMap()
is returning a QMap object, and it is in the returned QMap object (not the original QVariant in the levelObjects list) that the insertion is done.
精彩评论