开发者

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.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜