Question

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 doesn'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.

Was it helpful?

Solution

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.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top