Qt QMap.insert() failing
Qt QMap.insert() failing
我有一个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)中完成的。
相关文章:
- Insert函数不适用于2 if语句C++
- 如何在C++向量中奇数元素前面加上值-1,我在使用insert函数时遇到了问题
- 为什么 gcc 会给我可能未初始化的警告 deque::insert 带有过滤范围
- 当通知迭代器参数初始化为空列表的开头时,list::insert 行为是什么?
- 为什么使用 <uint8_t>MSVC 2015 编译器的 std::vector::insert 比 std::copy 快 5 倍?
- CreateDepthStencilView() is failing
- 如果迭代器没有因插入而无效,则使用std::find和C::insert()是线程安全的
- 与C++std::map::insert行为相比,C#排序字典的效率
- std::list 的两个 insert() 方法签名之间的实现差异
- 为什么 std::set::erase 与 std::set::insert 不一致?
- 编译器如何区分"vector::insert"的两种变体?
- std::map 在 [] 上调用默认构造函数,在 insert() 上调用复制构造函数
- STL vector.insert 方法期望_InputIterator作为参数
- 从更新查询获取'Cannot insert duplicate key'
- C++STL中set的'insert'函数的原理是什么?
- std::map insert && hyperload 导致复制
- 为什么在以下示例中 std::map::insert 失败?
- 排序时在空 std::vector 上使用 insert()
- C boost :: bimap insert()方法不起作用
- Qt QMap.insert() failing