QJsonObject和QJsonArray的巨坑

最近用Qt的QJsonObject和QJsonArray当做类变量来存储运行信息,发现这两货真的是巨坑。让人有一种JJ fly的感觉/(ㄒoㄒ)/~~。
写了个例子来说明下:

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    Dlldemo obj;
    obj.test();

    jsonArray.append(QJsonObject());
    QJsonObject jo;
    jo.insert("name","liying");
    jsonArray.append(jo);
}

void MainWindow::on_lineEdit_textChanged(const QString &arg1)
{
    qDebug()<<__FUNCTION__<<"---------------";
    qDebug()<<__LINE__;
    QJsonObject jo = jsonArray.at(0).toObject();
    qDebug()<<__LINE__;
    jo.insert("type",arg1);
    qDebug()<<__LINE__;
    jsonArray.replace(0,jo);
    qDebug()<<__LINE__;
#if 0
    //下面这种做法毫无效果
    jsonArray[0].toObject().insert("type",arg1);
    qDebug()<;
#endif
}

有一个LineEdit,我要在它的TextChanged事件中,修改QJsonObject。这段程序当连续输入”1111”时,会在jo.insert("type",arg1); 这句爆炸。这他妈几个意思,=_=。
既然是insert object的时候爆炸,那就先remove再insert

void MainWindow::on_lineEdit_2_textChanged(const QString &arg1)
{
    qDebug()<<__FUNCTION__<<"---------------";
    qDebug()<<__LINE__;
    QJsonObject jo = jsonArray.at(0).toObject();
    qDebug()<<__LINE__;
    jo.remove("type");
    qDebug()<<__LINE__;
    jo.insert("type",arg1);
    qDebug()<<__LINE__;
    jsonArray.insert(0,jo);
    qDebug()<<__LINE__;
}

(⊙o⊙)…并没什么卵效果。再继续

void MainWindow::on_lineEdit_3_textChanged(const QString &arg1)
{
    qDebug()<<__FUNCTION__<<"---------------";
    qDebug()<<__LINE__;
    QJsonObject jo = jsonArray.takeAt(0).toObject();
    qDebug()<<__LINE__;
    jo.remove("type");
    qDebug()<<__LINE__;
    jo.insert("type",arg1);
    qDebug()<<__LINE__;
    jsonArray.insert(0,jo);
    qDebug()<<__LINE__;
    qDebug()<

Oh,Yeah.屌爆了,可以输入好几个。
但是多输入几次就发现,依然会爆炸。

(⊙o⊙)…。恶心死了。这玩意到底应该怎么用??????

我最后的结论就是:
不要用QJsonArray QJsonObject来存储信息,尤其是需要频繁改动的时候

呵呵O(∩_∩)O~

你可能感兴趣的:(Qt)