热门关键字:
jquery > jquery教程 > html5 > QRowTable表格控件(三)-效率优化之-合理使用QSta…

QRowTable表格控件(三)-效率优化之-合理使用QSta…

262
作者:管理员
发布时间:2020/3/23 10:48:23
评论数:0
转载请自觉注明原文:http://www.jq-school.com/Show.aspx?id=1085

  QRowTable表格控件(三)-效率优化之-合理使用QStandardItem

  目录

  一、开心一刻

  二、概述

  三、效果展示

  四、QStandardItem

  1、QStandardItem是什么鬼

  2、性能分析

  3、QStandardItem使用上的坑

  五、相关文章

  原文链接:QRowTable表格控件(三)-效率优化之-合理使用QStandardItem

  一、开心一刻

  砖家在河边看到两只乌龟缩着一动不动,问一农民:“它们在干吗?”。

  农民说:“在比赛!”。

  砖家不解:“动都没动过,比什么赛?”。

  农民:“在比装死!”。

  砖家:“可是壳上有甲骨文的那只,早就死了啊?”。

  这时,一只乌龟猛然探出头来骂道:“MD,死了也不吭一声!”。

  突然另一只也伸出头来:“傻子!砖家的话你也信,你输了!”。

  二、概述

  最近换了一家新单位,工作的内容也发了一些变化。接触了一些大牛,也让我对Qt有了一个新的认识。

  不看源码真他妈不行呀

  这不今天就给大家说一说我最近工作中遇到的一个坑,而这个坑只有看了源码后才明白。

  上一篇QRowTable表格控件(二)-红涨绿跌文章讲到了我们怎么往表格中添加数据,并且是了一个简单的股票组件。可以存放各种行情数据、持仓和订单等等。

  下面问题就来了,我这个demo中的数据只有不到10行,当你真的把这个控件投入的生产环境时就会发现,demo就是demo,它就是个demo而已。

  博主自己大概测试了下把数据调到10000行,等了几分钟界面还没有出来,就放弃了。

  测试代码如下:

  intrate=10000;

  model->setRowCount(rate*itemVec.size());

  for(intj=0;j<rate;++j)

  {

  for(inti=0;i<itemVec.size();++i)

  {

  constOptionalMarketItem&info=itemVec.at(i);

  QStandardItem*item_price=newQStandardItem;

  item_price->setText(QString::number(info.price));

  item_price->setData(int(Qt::AlignRight|Qt::AlignVCenter),Qt::TextAlignmentRole);

  model->setItem(i,0,item_price);

  ...

  }

  }

  既然代码性能不行,我们当然需要去找更好的实现方式了,总不能就这么上线吧。

  于是乎,有了如下代码,30000行数据1-2s即可初始化完毕,震惊脸。

  intrate=10000;

  model->setRowCount(rate*itemVec.size());

  for(intj=0;j<rate;++j)

  {

  for(inti=0;i<itemVec.size();++i)

  {

  constOptionalMarketItem&info=itemVec.at(i);

  introw=i+j*itemVec.size();

  QModelIndexindex=model->index(row,0);

  model->setData(index,QString::number(info.price),Qt::DisplayRole);

  model->setData(index,int(Qt::AlignRight|Qt::AlignVCenter),Qt::TextAlignmentRole);

  }

  }

  我槽,上述两种书写方式有球区别,怎么会差别如此之大,下面让我为大家细细道来。

  三、效果展示

  以下是红涨绿跌效果图,demo中展示了30000数据,应该算是比较多,可以满足大多数的应用场景。

  腹黑版





如果您觉得本文的内容对您的学习有所帮助:支付鼓励



关键字:html
友荐云推荐