最近用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()<<jsonArray;
#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()<<jsonArray;
}
Oh,Yeah.*了,可以输入好几个。
但是多输入几次就发现,依然会爆炸。
(⊙o⊙)…。恶心死了。这玩意到底应该怎么用??????
我最后的结论就是:
不要用QJsonArray QJsonObject来存储信息,尤其是需要频繁改动的时候
呵呵O(∩_∩)O~