У меня есть объект levelObjects, который представляет собой QList QVariant of QMaps:
QList< QVariant > levelObjects;
Позже, когда я пытаюсь изменить значение чего-либо в одном из QMaps, похоже, это ничего не делает:
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() ), я вижу, что она проходит через кучу ассемблерных подпрограмм, связанных с QVariant, затем проходит через QMap::insert(), затем еще немного ассемблера. Моя первоначальная мысль заключалась в том, что это могло вызвать какой-то сигнал, который приводит к выполнению кода в другом месте, но, похоже, это не так.
есть идеи?
Изменить: я решил проблему с помощью обходного пути - избавиться от промежуточного QVariant и сделать levelObjects QList QMaps. Тем не менее, мне все еще любопытно, есть ли у кого-нибудь понимание того, почему это происходит.