最近用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~

QJsonObject和QJsonArray的巨坑的更多相关文章

  1. 【走过巨坑】android studio对于jni调用及运行闪退无法加载库的问题解决方案

    相信很多小伙伴都在android开发中遇到调用jni的各种巨坑,因为我们不得不在很多地方用到第三方库so文件,然而第三方官方通常都只会给出ADT环境下的集成方式,而谷歌亲儿子android studi ...

  2. 【单页应用巨坑之History】细数History带给单页应用的噩梦

    前言 在我们日常的网页浏览中,我们非常喜欢做一个操作:点击浏览器的前进后退在Ajax技术出现后,有些时候前进后退就会给开发者带来困扰,甚至一些开发者试图去干掉History随着Html5的发展,移动端 ...

  3. bat调用bat的一个巨坑

    [一个巨坑] a.bat的内容:echo 1b.batecho 2执行结果:运行a.bat时,输出1,然后调用b.bat, 但是 echo 2 显示不出来. bat怎么调用bat文件并返回? 例如主文 ...

  4. better-scroll之吸顶效果巨坑挣扎中

    今天和大家分享下better-scroll这款移动端用来解决各种滚动需求的插件(目前已经支持PC) 关于其中的API大家可以去官网看下  这里就给大家介绍几种常用的以及需要注意的点是什么 首先说一下b ...

  5. (杭电 2054)A==B?(这真是个巨坑)

    A == B ? Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  6. SpriteKit在复制节点时留了一个巨坑给开发者,需要开发者手动把复制节点的isPaused设置为false

    根据When an overlay node with actions is copied there is currently a SpriteKit bug where the node’s is ...

  7. 关于代码通过API操作阿里云RDS的巨坑

    由于项目原因,要通过API操作阿里云的数据库,于是简单研究了一下阿里云提供的相关文档,发现官方提供了.NET的SDK,而且还提供了github开源代码,这个要为阿里点赞! 于是到github上弄了一份 ...

  8. 史上巨坑: vim的"set foldmethod=syntax"设置竟然是导致ctrl+p(ctrl+n)补全在文件稍大时光标位于中间位置补全效率变慢的元凶!

    最近我的vim又让我闹心了. 问题出现在supertab的补全速度上, 有时候按下tab键半天才弹出补全列表, 即便是弹出了列表在列表上下移动也变得的相当缓慢, 这让我的很是蛋疼. 在完全无法接受这个 ...

  9. POJ 3178 凸包+DP (巨坑)

    题意: 思路: 这题巨坑!!! 这题巨坑!!! 这题巨坑!!! 这题巨坑!!! 这题巨坑!!! (而且没有题解--.5555555--) 只能照着自己想的写了-- 先求出来凸包 求凸包的方法呢:先找出 ...

随机推荐

  1. webapp之路--apple私有属性apple-touch-icon

    以前我们用过favicon在浏览器给网站进行身份标识,用法如下: <link href="http://image.feeliu.com/web/favicon.ico" r ...

  2. [iOS]Objective-C 第一节课

    Objective-C 第一节课 本节课的主要内容 创建Objective-C的第一个工程 HelloWorld Objective-C中的字符串 创建Objective-C的第一个工程 打开Xcod ...

  3. Halcon相关

      1.Halcon的自我描述 Program Logic Ø Each program consists of a sequence of HALCON operators Ø The progra ...

  4. 打开地图文件和shape文件代码加载Mxd文档

    代码加载Mxd文档 用代码添加Mxd文档,用到AxMapControl.LoadMxFile(sFilePath),我们只要将Mxd文档的路径传给这个方法即可 /// <summary>  ...

  5. PAT (Advanced Level) 1085. Perfect Sequence (25)

    可以用双指针(尺取法),也可以枚举起点,二分终点. #include<cstdio> #include<cstring> #include<cmath> #incl ...

  6. PAT (Advanced Level) 1002. A+B for Polynomials (25)

    为0的不要输出. #include<iostream> #include<cstring> #include<cmath> #include<algorith ...

  7. EasyUi之datagird解读

    1.其json格式需要为:  JSON Code  1234567891011121314151617181920212223   {     ,     "rows": [    ...

  8. ACM录 之 常识和错误。

    接下来说说一些ACM里面的常识和错误...(可能会比较乱) —— 首先ACM里面的代码都是要提交上去,然后让计算机自动判题的,所以...千万不要把 system("pause"); ...

  9. AppServ设置虚拟主机 及域名连接

    1: 安装好AppServ2.5.9软件,官网是:http://www.appservnetwork.com/ ,2.59下载地址是:http://nchc.dl.sourceforge.net/so ...

  10. Arduino线程库ProtoThreads

    参考: Arduino线程库ProtoThreads 一个“蝇量级” C 语言协程库