用QT 开发了一个上位机的工具用来解析串口的数据,数据量比较大 ,如果QT tableview 控件完全显示,内存消耗较大,所以解析结果先建立sql 数据索引,然后通过垂直滚动条的变化动态地获取数据,每次从数据库中提取50条,测试下来内存消耗较小,可以实现百万或者千万级的数据显示。

 图一 主界面

1:先将垂直滚动条的valuechanged signal 和自定义的slot 绑定

 QScrollBar *bar = ui->tableView->verticalScrollBar();
connect((QWidget*)bar,SIGNAL(valueChanged(int)),this,SLOT(acceptHScrollValueChanged(int)));

2:slot 传入垂直滚动条的位置值value 在线程中搜索数据。

void MainWindow::acceptHScrollValueChanged(int value)
{{model->removeRows(0,model->rowCount());HScrollValueChanged(value,logFileName,TotalMessageNumber);model->setRowCount(TotalMessageNumber);}
}

3:线程中取出数据返回到UI中显示

void workThread::getTableData(int index,QString path,int totalMessagNum)
{QVector< QVector<QString> > result ,result2;int tableIndex=index;if(!dbFlag){_sqlDb.setDBName("./log/"+path+"/"+path+"_log.db");_sqlDb.open("workThread");dbFlag=true;}_sqlDb.getLogPointByIndex(tableIndex,result);for(int i=0;i<result.size();i++){QVector<QString> tmp(5);for (int j = 0; j<5; ++j){if(j==2){//  list << new QStandardItem(QString::number(result[i][2].toInt(),16));tmp[2]=QString::number(result[i][2].toInt(),16);}else if(j==3){MessageToIVI message=_database->getMessageToIVI(result[i][2].toInt());tmp[3]=message.MessageName;// list << new QStandardItem(messageName);}else if(j==4){//  list <<new QStandardItem(getMessagBodyByOffset(result[i][3].toInt()));tmp[4]=getMessagBodyByOffset(result[i][3].toInt(),path);}else if(j==0){tmp[0]=result[i][0];}else if(j==1){tmp[1]=result[i][1];}}result2.push_back(tmp);}emit UpdatehDataSignal(result2,tableIndex);}

4:UI中显示数据库中显示的数据

void MainWindow::updateTableData(const QVector<QVector<QString> > result,int index)
{#ifdef USER_MODEqDebug()<<"updateTableData:"<<result.size();userModel  * model = (userModel *)ui->tableView->model();RstData rstData;rstData.retCode = 0;rstData.result=result;rstData.index = index;model->handleResults(rstData);//   model->SetData(result,index);#elseQStandardItemModel  * model = (QStandardItemModel *)ui->tableView->model();if (result.size() == 0)return;int start = index;int col = result[0].size();qDebug()<<"updateTableData inedex:"<<index<<"size:"<<result.size()<<"col:"<<col;int row = result.size();for (int i = 0; i<row; ++i){QList<QStandardItem*> list;for (int j = 0; j<5; ++j){list <<new QStandardItem(result[i][j]);}model->insertRow(i + start, list);for(int k=0;k<3;k++){model->item(i + start, k)->setTextAlignment(Qt::AlignCenter);}}model->setRowCount(TotalMessageNumber);
#endif}

内存消耗才58兆

d5ebdede35e241b6b315794d27f37f82_noop

参考内容:

https://blog.csdn.net/weixin_44575696/article/details/117407527?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1.pc_relevant_default&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1.pc_relevant_default&utm_relevant_index=2

QT 实现百万级的数据显示内存消耗几十兆相关推荐

  1. 多数据中心的百万级消息服务实战

    背景 利用RabbitMQ集群横向扩展能力,均衡流量压力,让消息集群的秒级服务能力达到百万,Google曾做过此类实验:有货在某些推送场景下也做了类似尝试,在此对此前实践经验以及踩得坑做些总结工作. ...

  2. php 千万级访问量网站,承受每天百万级访问量的网站需要多少台服务器?

    之前了解了一下国内某团购网站的架构,其中提到了服务器硬件和 pv 以及 qps 的一些关系. 百万级别的访问量,应该指的是 PV 吧. 并发数计算 PV 的粗算计算公式是 qps(或并发数) x 86 ...

  3. 如何用 Netty 设计一个百万级推送服务?

    1. 背景 1.1. 话题来源 最近很多从事移动互联网和物联网开发的同学给我发邮件或者微博私信我,咨询推送服务相关的问题.问题五花八门,在帮助大家答疑解惑的过程中,我也对问题进行了总结,大概可以归纳为 ...

  4. 基于Netty的百万级推送服务设计要点

    1. 背景 1.1. 话题来源 最近很多从事移动互联网和物联网开发的同学给我发邮件或者微博私信我,咨询推送服务相关的问题.问题五花八门,在帮助大家答疑解惑的过程中,我也对问题进行了总结,大概可以归纳为 ...

  5. Netty学习总结(3)——Netty百万级推送服务

    1. 背景 1.1. 话题来源 最近很多从事移动互联网和物联网开发的同学给我发邮件或者微博私信我,咨询推送服务相关的问题.问题五花八门,在帮助大家答疑解惑的过程中,我也对问题进行了总结,大概可以归纳为 ...

  6. 处理百万级以上的数据处理

    处理百万级以上的数据提高查询速度的方法: 1.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描. 2.对查询进行优化,应尽量避免全表扫描,首先应考 ...

  7. Java物联网开发(二) —— 开源百万级分布式 MQTT 消息服务器EMQX

    开源百万级分布式 MQTT 消息服务器EMQX 一. 是什么 1. 简介 2. 分类 3. EMQ X 消息服务器功能列表 二. 安装 1. 安装方式 rpm安装 docker安装 免安装 2. 目录 ...

  8. 打造百万级访问网站的技术准备

    首先,当你看到这个标题的时候你不要有所质疑,这里说打造百万级访问的网站并不是说上犹博客已经有这个级别了,上犹博客自从去年7月24日注册域名以来到现在已经走过了1年多的时间,之所以在首页显示本站已经运营 ...

  9. SQL数据库不用SQL语句能显示全表的内容_MySQL百万级数据库优化方案

    一.百万级数据库优化方案 1.对查询进行优化,要尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断 ...

最新文章

  1. 【资源】100+本数据科学电子书
  2. 机器人时代的资本主义:21世纪的工作,收入和财富
  3. Android异步处理三:Handler+Looper+MessageQueue深入详解
  4. 苹果在GitHub上正式开源iOS内核源码
  5. 获取组件的方式(方法)
  6. 使用 SAP BTP 创建一个 Spring Boot Java 应用
  7. 在c语言中char型数据在内存中的储存形式为什么
  8. SAP License:SAP信用控制
  9. 单页面响应式模板:黑石
  10. python 获取数据库字段类型_python中如何读取数据库数据类型
  11. seL4操作系统基础01:seL4 whitepaper概览
  12. vrml行走和静止的人代码_CAE二次开发的核心不是代码
  13. 绝地大逃杀服务器维护多少时间,绝地求生4月12日维护到几点/维护多长时间 绝地求生4.12维护什么时候好/能进游戏...
  14. Python3 类(2)
  15. Java调用C/C++的过程
  16. 【算法学堂】字符串基础算法
  17. 【数值优化之线搜索方法】
  18. java 左移和右移理解
  19. Android长时间后台运行,内存被回收再次打开导致APP崩溃(APP在后台被系统回收后,如何重新启动?)
  20. 小米系硬件查询保修日期

热门文章

  1. 为什么家里的wifi连接上但用不了
  2. 请你讲讲分布式系统中的限流器一般如何实现?
  3. 五月集训-14【栈】
  4. MATLAB图形的实验原理,信息隐藏实验1
  5. DBeaver 给id设置为键 以及执行sql查询语句
  6. 笑一笑-道高一尺魔高一丈
  7. 公示系统php,企业信用查询公示系统
  8. PLC闪烁电路的实现
  9. PTA第八章7-2 统计英文单词个数
  10. 强烈推荐代码生成器Cursor