最近用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. javascript 数组合并

    javascript 中两个数组合并,当然可以遍历其中一个数组,通过push()方法将元素插入到另一个数组中. 另外,也可以使用内置的方法(javascript Array 对象上就具有的方法,或许比 ...

  2. 好用的消息对话框-TipsWindown

    TipsWindow的官网地址为:http://leotheme.cn/javascript/jquery-plugins-tipswindow-2-0.html 这个是一个爱好者维护的!在这里感谢这 ...

  3. 控制流之for

    for..in是另外一个循环语句,它在一序列的对象上 递归 即逐一使用队列中的每个项目.我们会在后面的章节中更加详细地学习序列.使用for语句~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ...

  4. MySQL索引背后的之使用策略及优化(高性能索引策略)

    为了讨论索引策略,需要一个数据量不算小的数据库作为示例.本文选用MySQL官方文档中提供的示例数据库之一:employees.这个数据库关系复杂度适中,且数据量较大.下图是这个数据库的E-R关系图(引 ...

  5. Android NDK开发及调用标准linux动态库.so文件

    源:Android NDK开发及调用标准linux动态库.so文件 预备知识及环境搭建 1.NDK(native development Kit)原生开发工具包,用来快速开发C.C++动态库,并能自动 ...

  6. iOS开发中涉及的字体问题

    iOS中常见3种方法来控制字体,下面根据我在网上学习总结的内容发布(已完美避过所有坑,iOS8.4) 一.系统默认的设置字体方法(只对英文和数字生效的方法) 1.系统默认提供的字体主要是指UIFont ...

  7. yum groupinstall "Development Tools" 批量安装软件

    注:可以通过 yum grouplist 来查看可能批量安装哪些列表 从Windows转到Linux下面,一个不习惯的地方就是在图形界面下安装和删除软件的时候非常缓慢.但是如果你掌握了用yum的命令行 ...

  8. 1602A液晶

    液晶显示屏中,1602型算是比较简单的一种,据说和12864还是全兼容的.这两天学习的结果如下.一.1602里的存储器有三种:CGROM.CGRAM.DDRAM.CGROM保存了厂家生产时固化在LCM ...

  9. css(四)-- 盒子模型和定位

    盒子模型: 盒子模型就是把一个html边框比作成了一个盒子的边框,盒子模型要做用于操作数据与边框之间的距离或者 是边框与边框之间的距离. 盒子模型主要是用于操作内边距(padding)与外边距(mar ...

  10. Tsinsen-1487:分配游戏【树状数组】

    首先一定要看到x + y + z = N这个条件,没看到就世界再见了. 赢的人得分需要大于等于2,那么无非就是 (x, y), (x, z), (y, z), (x, y, z) 大于其他的点.但是考 ...