c++ - Qt QMap.insert() 失败

标签 c++ qt qlist qvariant qmap

我有一个 levelObjects 对象,它是 QMaps 的 QVariants 的 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() 的代码),我可以看到它经历了一堆与 QVariants 相关的汇编子例程,然后经历了 QMap::insert(),然后是更多集会。我最初的想法是,这可能触发了某种信号,导致其他地方的代码被执行,但事实似乎并非如此。

有什么想法吗?

编辑:我通过一种变通方法解决了这个问题——去掉中间的 QVariant 并让 levelObjects 成为 QMap 的 QList。但是,我仍然很好奇是否有人知道为什么会发生这种情况。

最佳答案

线上:

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

levelObjects[id].toMap() 正在返回一个 QMap 对象,并且在返回的 QMap 对象(不是 levelObjects 列表中的原始 QVariant)中完成插入。

关于c++ - Qt QMap.insert() 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7251897/

相关文章:

c++ - QDomElement 是否会在创建它的函数之外无效?

c++ - 如果列表为空,QList::first() 会返回什么?

c++ - 在 C++/QT 中制作抽象类对象的 QList?

qt - QList 中的动态内存

c++ - 在轮廓/OpenCV c++ 中搜索轮廓

c++ - 如何在 C++ 代码中将 cmake 变量转换为字符串?

c++ - 在scala中加载本地库时出错

qt - 如何使用 Qt 拒绝 TCP 请求

qt - Qt 4.4.3菜单中的单选按钮的制作方法

c++ - 什么时候会在编译过程中删除琐碎的(没有效果的代码)代码?