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