QTableView大数据文件显示(1000万行数据)

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

参考:

(2条消息) QTableWidget大数据文件显示(1000万行数据)_江南又旧雨的博客-CSDN博客

1,QTableView直接加载显示1000万行数据进行显示。

读取文件时间+表格插入数据时间   需要等待的比较久。

表格后期插入一行数据大概需要0.1ms,1000万行数据,大概得100s得时间。

//加载大数据
	m_pTestView = new QTableView(this);
	QStandardItemModel *model = new QStandardItemModel();
	m_pTestView->setModel(model);
	model->setColumnCount(15);
	for (int i = 0; i < 10; i++)
	{
		model->setHeaderData(i, Qt::Horizontal, QString::fromLocal8Bit(DefQSReceiverInfoTableSize[i][0]));
	}

	QVBoxLayout *mainLayout = new QVBoxLayout(ui.widget);
	mainLayout->addWidget(m_pTestView);
	mainLayout->setMargin(0);
	mainLayout->setSpacing(0);
	QString filePath = "./ReceiverTableData10000000.txt";
	ui.widget->setLayout(mainLayout);
	加载数据
	FILE *ifp = fopen(filePath.toStdString().data(), "r");

	if (ifp == NULL)
	{
		printf("Cannot open point cloud file.\n");
		return ;
	}

	const int BUFSIZE = 512;
	char buf[BUFSIZE];
	memset(buf, '\0', BUFSIZE);
	quint32 i = 0;
	while (fgets(buf, BUFSIZE, ifp) != NULL)
	{
		QString line = QByteArray(buf, strlen(buf)-1);
		memset(buf, '\0', BUFSIZE);
		QStringList strList = line.split("&");
		model->insertRow(i);
		model->setData(model->index(i, 0),strList[0]);
		model->setData(model->index(i, 1), strList[1]);
		model->setData(model->index(i, 2), strList[2]);
		model->setData(model->index(i, 3), strList[3]);
		model->setData(model->index(i, 4), strList[4]);
		model->setData(model->index(i, 5), strList[5]);
		model->setData(model->index(i, 6), strList[6]);
		model->setData(model->index(i, 7), strList[7]);
		model->setData(model->index(i, 8), strList[8]);
		model->setData(model->index(i, 9), strList[9]);
		model->setData(model->index(i, 10), strList[10]);
		//model->setItem(i, 0, new QStandardItem(strList[0]));
		//model->setItem(i, 1, new QStandardItem(strList[1]));
		//model->setItem(i, 2, new QStandardItem(strList[2]));
		//model->setItem(i, 3, new QStandardItem(strList[3]));
		//model->setItem(i, 4, new QStandardItem(strList[4]));
		//model->setItem(i, 5, new QStandardItem(strList[5]));
		//model->setItem(i, 6, new QStandardItem(strList[6]));
		//model->setItem(i, 7, new QStandardItem(strList[7]));
		//model->setItem(i, 8, new QStandardItem(strList[8]));
		//model->setItem(i, 9, new QStandardItem(strList[9]));
		//model->setItem(i, 10, new QStandardItem(strList[10]));
		i = i + 1;
	}

	fclose(ifp);
	ifp = 0;

2,动态文件加载,开启一个线程读文件,这样就不会因为读取文件时间长导致界面卡死;在QTableView采用分页显示,每次交互只加载需要在屏幕上显示的那些行数据,表格固定的是一百行,每次操作对这一百行数据进行刷新,虚拟出完整表格的效果。

参考下文博客中得动态加载:

(2条消息) QTableWidget大数据文件显示(1000万行数据)_江南又旧雨的博客-CSDN博客

3.自定义TableMode,继承QStandardItemModel

效果同1,可参考性能分析:

(2条消息) QT 如何用表格显示大数量的数据_江南又旧雨的博客-CSDN博客

4.自定义TableMode模型,继承QAbstractTableModel,自定义数据模型。

可以很快得加载完1000万行大数据,并且占用的内存也不大。

class MyTableModel : public QAbstractTableModel

struct Student
{
	char name[16];
	char id[24];
	char sex[8];
	int age;
	char phone[16];
	char hobby[24];
	char company[16];
};
//使用QVector作为模型的底层数据结构存储数据,其内存占用与QList相当,尾部追加插入耗时与QList相当,但头部插入比QList耗时较多
	QList<Student*> m_itemList;
struct ModelItem {
	QString id;
	QString name;
	QString one;
	QString two;
	QString three;
	QString four;
	QString five;
	QString six;
};
QList<ModelItem> modelData;

测试:开始的卡顿,主要是数据解析耗时,后面可以使用多线程加载数据,不卡顿界面。向表格中加载大数据还是非常快的。

QTableView大数据文件显示(1000万行数据)

 源代码:

(2条消息) 自定义TableMode模型,继承QAbstractTableModel,自定义数据模型,可加载1千万行大数据资源-CSDN文库文章来源地址https://www.toymoban.com/news/detail-472040.html

到了这里,关于QTableView大数据文件显示(1000万行数据)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 聊聊Excel解析:如何处理百万行EXCEL文件

    Excel表格在后台管理系统中使用非常广泛,多用来进行批量配置、数据导出工作。在日常开发中,我们也免不了进行Excel数据处理。 那么,如何恰当地处理数据量庞大的Excel文件,避免内存溢出问题?本文将对比分析业界主流的Excel解析技术,并给出解决方案。 如果这是您第一

    2024年02月11日
    浏览(39)
  • Java读取600万行的txt文件,内存溢出解决方案

    可能造成内存溢出的原因: 一次性把txt文件读取到内存 频繁的new对象 实体类 可以使用对象池解决频繁new对象的问题 解决一次性把文件读取到内存: 可以使用文件流方式,使用java.util.Scanner类扫描文件的内容,一行一行连续地读取

    2024年04月14日
    浏览(55)
  • 【ArcGIS Pro微课1000例】0054:Pro3.0创建数据库(文件数据库、移动数据库、企业级数据库)解读

    ArcGIS Pro中主要有三种数据库类型,它们分别是: 文件地理数据库 、 移动地理数据库 和 企业级地理数据库 。它们的区别如下: 存储方式 :文件地理数据库是多个文件存储在具有.gdb扩展名的文件夹中,每个数据集都包含在单个文件中;移动地理数据库存储在完全包含在单个

    2024年02月04日
    浏览(51)
  • Qt QTableView 实现数据改变表格自动刷新

    这里提供一份简单的代码示例,实现QTableView实时刷新数据: 在代码中,我们首先创建一个QStandardItemModel数据模型,并设置表格的行数和列数,同时设置表头和填充数据。然后将数据模型绑定到QTableView中,并实现数据变化自动刷新的功能。最后显示QWidget窗口。 在实际开发中

    2024年02月13日
    浏览(45)
  • 参考RabbitMQ实现一个消息队列

    消息队列的本质就是阻塞队列,它的最大用途就是用来实现生产者消费者模型,从而实现 解耦合 以及 削峰填谷 。 在分布式系统中不再是单个服务器而是服务器“集群”,如果我们我们直接A服务器给B服务器发送请求,B服务器给A服务器返回响应,这样的话我们AB的耦合较大

    2024年02月14日
    浏览(86)
  • 《消息队列MyMQ》——参考RabbitMQ实现

    目录 一、什么是消息队列? 二、需求分析 1)核心概念 2)核心API 3)交换机类型 4)持久化 5)网络通信 ​编辑 6)消息应答 三、 模块划分 四、创建核心类 1.ExChange 2.MSGQueue  3.Binding 4. Message 五. 数据库设计  1.配置 sqlite 引⼊ pom.xml 依赖  配置数据源 application.yml 2.实现创建

    2024年02月04日
    浏览(36)
  • 如何对qtableview上的数据进行多选及多行删除

    tableview添加checkbox 单行删除相对来说比较容易,多行删除就比较麻烦了,要从最后一行往前删,不然会出现删错行的问题。

    2024年02月03日
    浏览(42)
  • Qt 获得QTableview所选中的行的某一列数据

    1、点击QtableView控件-》右键-》跳到槽-》选择 2、编写槽函数信息  备注:由于信息保密,我把类名用XXX代替了

    2024年02月16日
    浏览(45)
  • 使用Pyecharts进行全国水质TDS地图可视化全过程2:使用Power Query 进行百万行级别数据匹配

    简介:本文介绍使用Excel  Power Query进行数据匹配。利用这种方式,可以在几分钟内完成百万级别数据量的匹配。 在TDS可视化地图项目中,我们的原始数据没有TDS和具体安装地址的对应,我们需要通过机器条码去匹配安装台账的地址。 这个数据量很大,有多大?我们截取的时

    2024年02月05日
    浏览(57)
  • 3.龙芯2k1000 builroot文件系统编译过程

    (一)、在Ubuntu环境下载并配置交叉编译链(与内核编译工具链相同) GCC交叉编译工具链下载,下载地址为:http://ftp.loongnix.cn/embedd/ls3a/toolchain/gcc-4.9.3-64-gnu.tar.gz 将gcc-4.9.3-64-gnu.tar.gz内容解压到/opt目录下 配置环境变量 (二)、下载buildroot源码 下载buildroot源码,下载地址为:

    2024年02月02日
    浏览(35)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包