我想从QJsonArray中删除所有元素,并且遇到比我想象的更麻烦的事情。这里是我的代码:删除QJsonArray中的所有元素

void Assessment::clearQJsonArray(QJsonArray *array) {

printQJsonArray(*array);

for(int i=0;icount();i++) {

array->removeAt(i);

}

qDebug() << "Test clear:" << array->count();

printQJsonArray(*array);

}

void Assessment::printQJsonArray(QJsonArray array) {

QJsonDocument doc;

doc.setArray(array);

qDebug() << doc.toJson();

}

void Assessment::testClearQJsonArray() {

QJsonArray array;

QJsonObject obj1, obj2, obj3, obj4;

obj1.insert("number",1);

obj2.insert("number",2);

obj3.insert("number",3);

obj4.insert("number",4);

array.append(obj1);

array.append(obj2);

array.append(obj3);

array.append(obj4);

qDebug() << "Before clear";

qDebug() << "Test size:" << array.count();

QJsonObject element;

for(int i=0;i

element = array.at(i).toObject();

qDebug() << element.value("number").toInt();

}

clearQJsonArray(&array);

qDebug() << "After clear";

for(int i=0;i

element = array.at(i).toObject();

qDebug() << element.value("number").toInt();

}

qDebug() << "Test size:" << array.count();

}

而且我得到这样的输出:

(void Assessment::testClearQJsonArray()): Before clear

(void Assessment::testClearQJsonArray()): Test size: 4

(void Assessment::testClearQJsonArray()): 1

(void Assessment::testClearQJsonArray()): 2

(void Assessment::testClearQJsonArray()): 3

(void Assessment::testClearQJsonArray()): 4

(void Assessment::printQJsonArray(QJsonArray)): "[\n {\n \"number\": 1\n },\n {\n \"number\": 2\n },\n {\n \"number\": 3\n },\n {\n \"number\": 4\n }\n]\n"

(void Assessment::clearQJsonArray(QJsonArray*)): Test clear: 2

(void Assessment::printQJsonArray(QJsonArray)): "[\n {\n \"number\": 2\n },\n {\n \"number\": 4\n }\n]\n"

(void Assessment::testClearQJsonArray()): After clear

(void Assessment::testClearQJsonArray()): 2

(void Assessment::testClearQJsonArray()): 4

(void Assessment::testClearQJsonArray()): Test size: 2

我真的不明白为什么对象1和3被删除,但不是2和4。任何想法?

谢谢。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐