我有一个levelObjects对象,它是QMaps的qvariant的QList:
QList< QVariant > levelObjects;
后来,当我试图改变某个qmap中的值时,它似乎没有做任何事情:
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()的代码行),我可以看到它经历了一堆与qvariables相关的汇编子例程,然后经历了QMap::insert(),然后是更多的汇编。我最初的想法是,这可能触发了某种信号,导致其他地方的代码被执行,但情况似乎并非如此。
任何想法吗?
编辑:我通过一个变通方法解决了这个问题-摆脱了中间的QVariant,并使levelObjects成为qmap的QList。然而,我仍然很好奇,是否有人有任何关于为什么会发生这种情况的见解。
一行:
levelObjects[id].toMap().insert("x", stringNum)
levelObjects[id].toMap()
返回一个QMap对象,插入是在返回的QMap对象(而不是levelObjects列表中的原始QVariant)中完成的。