2011-08-31 42 views
1

我有一個levelObjects對象,這是一個的QList QMaps的QVariants的:Qt的QMap.insert()不

QList<QVariant> levelObjects; 

後來,當我試圖更改QMaps的一個東西的價值,它不「T似乎做任何事情:

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成爲QMaps的QList。不過,如果有人對此有何看法,我仍然很好奇。

回答

3

就行了:

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

levelObjects[id].toMap()返回一個對象QMAP,​​它是在插入完成返回QMAP對象(不是原來的QVariant在levelObjects列表)。

+0

啊,這是有道理的。謝謝。 – numegil