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

这篇具有很好参考价值的文章主要介绍了QT 实现百万级的数据显示内存消耗几十兆。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

   QT 实现百万级的数据显示内存消耗几十兆  图一 主界面

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_MODE

    qDebug()<<"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);

#else
    QStandardItemModel  * 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文章来源地址https://www.toymoban.com/news/detail-510639.html

到了这里,关于QT 实现百万级的数据显示内存消耗几十兆的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • java使用jdbcTemplate查询并插入百万级数据解决方案

    背景:使用JdbcTemplate查询500万数据,然后插入到数据库。 这么多的数据按照普通的方式直接查询然后插入,服务器肯定会挂掉,我尝试过使用分页查询的方式去进行分批查询插入,虽然也能达到保证服务器不挂掉的效果,但是有一个严重的问题,每次查询的数据很难保证顺序

    2024年02月03日
    浏览(34)
  • EMQX +计算巢:构建云上物联网平台,轻松实现百万级设备连接

    随着物联网技术的逐步成熟,海量设备产生的数据为企业数字化提供了更加丰富的数据基础。如何将海量设备数据与企业生产管理系统、业务应用系统以及运维监控系统有机结合,是企业在未来实现差异化竞争与业务创新的关键。 在以物联网数据为基础的数字化转型过程中,

    2024年02月02日
    浏览(41)
  • Java 中使用 ES 高级客户端库 RestHighLevelClient 清理百万级规模历史数据

    🎉工作中遇到这样一个需求场景:由于ES数据库中历史数据过多,占用太多的磁盘空间,需要定期地进行清理,在一定程度上可以释放磁盘空间,减轻磁盘空间压力。 🎈在经过调研之后发现,某服务项目每周产生的数据量已经达到千万级别,单日将近能产生 两百万 的数据量

    2024年02月11日
    浏览(31)
  • 98.qt qml-使用曲线图综合示例、支持多种鼠标交互、支持百万数据显示(已适配黑白风格)

    在上章我们只是简单实现了曲线图和折线图的显示: 79.qt qml-如何在QML中使用QCustomPlot之曲线/折线示例(已适配黑白风格)_qml 折线图_诺谦的博客-CSDN博客 所以本章实现综合示例、并添加多种功能如下所示: 详细显示:鼠标任意移动显示具体值内容 鼠标右击: 弹出菜单栏,支持

    2024年02月05日
    浏览(50)
  • E往无前 | 海量数据ES 扩展难?腾讯云大数据ES 扩展百万级分片也“So Easy~”

    《E往无前》系列将着重展现腾讯云ES在持续深入优化客户所关心的「省!快!稳!」诉求,能够在低成本的同时兼顾高可用、高性能、高稳定等特性,可以满足微盟、小红书、微信支付等内外部大客户的核心场景需求。 E往无前 | 海量数据ES扩展难?腾讯云ES 扩展百万级分片

    2024年02月06日
    浏览(74)
  • TCP服务器的演变过程:使用epoll构建reactor网络模型实现百万级并发(详细代码)

    手把手教你从0开始编写TCP服务器程序,体验开局一块砖,大厦全靠垒。 为了避免篇幅过长使读者感到乏味,对【TCP服务器的开发】进行分阶段实现,一步步进行优化升级。 本节,在上一章节介绍了如何使用epoll开发高效的服务器,本节将介绍使用epoll构建reactor网络模型,实

    2024年02月01日
    浏览(53)
  • 【已解决】Java 中使用 ES 高级客户端库 RestHighLevelClient 清理百万级规模历史数据

    🎉工作中遇到这样一个需求场景:由于ES数据库中历史数据过多,占用太多的磁盘空间,需要定期地进行清理,在一定程度上可以释放磁盘空间,减轻磁盘空间压力。 🎈在经过调研之后发现,某服务项目每周产生的数据量已经达到千万级别,单日将近能产生 两百万 的数据量

    2024年02月14日
    浏览(35)
  • 五、Linux C/C++ 对epoll-reactor服务器的百万级高并发实现

    前言:基于epoll的反应堆模式(reactor)的服务器程序,进行百万并发量的连接测试。通过代码优化,以及服务器与客户端的硬件配置优化,达到百万并发。 代码实现 代码实现: 1台服务器:8G运行内存 8核CPU 3台客户端:4G运行内存 4核CPU 这些硬件配置可以通过虚拟机配置。 按照

    2024年02月20日
    浏览(71)
  • MySQL 百万级/千万级表 全量更新

    业务需求:今天从生成测试环境迁移了一批百万级/千万级表的数据,领导要求将这批数据进行脱敏处理(将真实姓名 、电话、邮箱、身份证号等敏感信息进行替换)。迁移数据记录数如下(小于百万级的全量更新不是本文重点): 表名 表名含义 行记录数 base_house 房屋表 42

    2024年02月05日
    浏览(31)
  • ElasticSearch + Canal 开发千万级的实时搜索系统【转】

    我们总结一下新搜索系统需要解决的几个问题: 海量请求。几百万的请求毫无压力,上千万上亿也要可以扛得住。 实时搜索。指的是当一个用户修改了其数据之后,另一个用户能实时地搜索到改用户。 海量请求。要扛得起海量的搜索请求,可以使用ElasticSearch来实现,它是在

    2024年04月09日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包