Qt编写气体安全管理系统10-数据导出

2022-05-08科技266

一、前言数据导出一般指导出到excel表格,可能有部分用户还需要导出到pdf,因为pdf基本上不可编辑,防止用户重新编辑导出的数据,excel可能绝大部分用过电脑的人都知道,广为流行,主要就是微软的office软件和金山的wps软件,所以只要涉及到导出数据的软件,基本上默认都是导出到excel,以便领导或者其他非软件专业人士打开看数据,或者二次分析数据,Qt中没有数据导出到excel相关的类,有一些第三方开源的比如qtxlsx、libxls等,很多初学者首先选择的是用qaxobject来调用excel的组件实现导出数据,这种方法比较原始,但是也功能强大,只要是excel接口提供的,都能实现,比如导出特定的图形等,缺点就是慢,速度真慢,几十万百万的数据量导出,卡出屎,说白了效率比较低,关键还不能跨平台,只能在WIN上,到了其他系统全部歇菜,而Qt的大量应用场景在linux系统,这也是Qt的起步发家的地方,而qtxlsx、libxls就很好的解决了这个问题,跨平台。本人更倾向于造个轮子,以便适应项目需要,比如接口一定要简单,速度一定要快,一定要跨平台(因为本人项目绝大部分都是嵌入式linux)。

通用数据导出组件功能特点:

1. 原创导出数据机制,不依赖任何office组件或者操作系统等第三方库,尤其是支持嵌入式linux。

2. 10万行数据9个字段只需要2秒钟完成。

3. 只需要四个步骤即可开始急速导出大量数据到Excel。

4. 同时提供直接写入数据接口和多线程写入数据接口,不卡主界面。

5. 可设置标题、副标题、表名。

6. 可设置字段名称、列宽度。

7. 可设置是否启用校验过滤数据、校验的列、校验规则、校验值,符合规则的特殊颜色显示。

8. 可设置随机背景颜色及需要随机背景色的列集合。

9. 支持分组输出数据,比如按照设备分组输出数据,方便查看。

10. 可自定义行内容分隔符。

11. 可追加数据形式写入数据,建议每次追加的数据小于10000条。

12. 灵活性超高,可自由更改源码设置对齐方式、文字颜色、背景颜色等。

13. 支持任意excel表格软件,包括但不限于excel2003/2007/2010/2013/2017/wps/openoffice等。

14. 除了提供导出到Excel类以外,还提供导出到Pdf文件以及打印数据的类。

15. 注释完善,详细完整的使用demo,支持QTableWidget、QTableView、数据库三种数据源。

16. 纯Qt编写,支持任意Qt版本+任意编译器+任意系统。

皮肤开源:[)

文件名称:styledemo

体验地址:[)

文件名称:bin_sams.zip

二、功能特点1. 采集数据端口,支持串口端口+网络端口,串口支持自由设置串口号+波特率,网络支持自由设置IP地址+通讯端口,每个端口支持采集周期,默认1秒钟一个地址,支持设置通讯超时次数,默认3次,支持最大重连时间,用于重新读取离线的设备。

2. 控制器信息,能够添加控制器名称,选择控制器地址+控制器型号,设置该控制器下面的探测器数量。

3. 探测器信息,能够添加位号,可自由选择探测器型号,气体种类,气体符号,高报值,低报值,缓冲值,清零值,是否启用,报警声音,背景地图,存储周期,数值换算小数点位数,报警延时时间,报警的类型(HH,LL,HL)等。

4. 控制器型号+探测器型号+气体种类+气体符号,均可自由配置。

5. 地图支持导入和删除,所有的探测器对应地图位置可自由拖动保存。

6. 端口信息+控制器信息+探测器信息,支持导入导出+导出到excel+打印。

7. 运行记录+报警记录+用户记录,支持多条件组合查询,比如时间段+控制器+探测器等,所有记录支持导出到excel+打印。

8. 导出到excel的记录支持所有excel+wps等表格文件版本,不依赖excel等软件。

9. 可删除指定时间范围内的数据,支持自动清理早期数据,设置最大保存记录数。

10. 支持报警短信转发,支持多个接收手机号码,可设定发送间隔,比如即时发送或者6个小时发送一次所有的报警信息,短信内容过长,自动拆分多条短信。

11. 支持报警邮件转发,支持多个接收邮箱,可设定发送间隔,比如即时发送或者6个小时发送一次所有的报警信息,支持附件发送。

12. 高报颜色+低报颜色+正常颜色+0值颜色+曲线背景+曲线颜色等,都可以自由选择。

13. 软件的中文标题+英文标题+logo路径+版权所有都可以自由设置。

14. 提供开关设置开机运行+报警声音+自动登录+记住密码等。

15. 报警声音可设置播放次数,界面提供17种皮肤文件选择。

16. 支持云端数据同步,可设置云端数据库的信息,比如数据库名称,用户名+密码等。

17. 支持网络转发和网络接收,网络接收开启后,软件从udp接收数据进行解析。网络转发支持多个目标IP,这样就实现了本地采集的软件,自由将数据转到客户端,随时查看探测器数据。

18. 自动记住用户最后停留的界面+其他信息,重启后自动应用。

19. 报警自动切换到对应的地图,探测器按钮闪烁。

20. 双击探测器图标,可以进行回控。

21. 支持用户权限管理,管理员+操作员两大类,用户登录+用户退出,可以记住密码和自动登录,超过三次报错提示并关闭程序。

22. 支持四种监控模式,设备面板监控+地图监控+表格数据监控+曲线数据监控,可自由切换,四种同步应用。

23. 支持报警继电器联动,一个位号可以跨串口联动多个模块和继电器号,支持多对多。

24. 本地数据存储支持sqlite+mysql,支持远程数据同步到云端数据库。自动重连。

25. 本地设备采集到的数据实时上传到云端,以便手机APP或者web等其他方式提取。

26. 支持两种数据源,一种是串口和网络通过协议采集设备数据,一种是数据库采集。数据库采集模式可以作为通用的系统使用。

27. 自带设备模拟工具,支持16个设备数据模拟,同时还带数据库数据模拟,以便在没有设备的时候测试数据。

28. 默认通信协议采用modbus协议,后期增加mqtt等物联网协议的支持,做成通用系统。

29. 支持所有windows操作系统+linux操作系统和其他操作系统。

三、效果图

四、核心代码void frmDataAlarm::on_btnExcel_clicked{ //先判断行数,超过一定大小弹出提示 QString str = ui-labResultCount-text; QStringList list = str.split(" "); int rowCount = list.at(1).toInt; if (rowCount 100000) { QUIHelper::showMessageBoxError("不支持大量数据,请重新查询!", 3); return; } if (rowCount 10000) { QString msg = QString("要导出的数据共 %1 条,请耐心等待!确定要导出数据吗?").arg(rowCount); if (QUIHelper::showMessageBoxQuestion(msg) != QMessageBox::Yes) { return; } } QString fileName = API::getFileName("保存文件(*.xls)", QUIHelper::appPath + "/db", QString("alarmlog_%1.xls").arg(STRDATETIME)); if (fileName.isEmpty) { return; } //设定导出数据字段及排序字段 QString columns = "LogID,PositionID,DeviceName,NodeName,NodeValue,NodeSign,Content,StartTime,ConfirmUser,ConfirmTime,ConfirmContent" QString where = whereSql + " order by " + QString("LogID %1").arg(App::AlarmLogOrder); QStringList content = DBHelper::getContent("AlarmLog", columns, where, "", ""); QListQString columnNames; QListint columnWidths; columnNames "编号" "位号" "控制器名称" "探测器名称" "报警值" "单位" "报警类型" "触发时间" "确认用户" "确认时间" "确认信息" columnWidths 50 80 120 100 50 50 100 135 80 135 120; QString name = ui-ckNodeName-isChecked ? ui-cboxNodeName-currentText : "所有探测器" QString type = name + "报警记录" ExcelAPI::Instance-saveExcel(fileName, type, type, "", columnNames, columnWidths, content); QString msg = QString("导出%1").arg(type); DBHelper::addUserLog(msg); if (QUIHelper::showMessageBoxQuestion(msg + "成功!确定现在就打开吗?") == QMessageBox::Yes) { QString url = QString("file:///%1").arg(fileName); QDesktopServices::openUrl(QUrl(url, QUrl::TolerantMode)); }}

相关文章

万达又卖掉37家万达百货,苏宁接盘,王健林现在还这么缺钱吗?

从2017年6月王健林和融创孙宏斌、富力的那笔600多亿元的大甩卖(主要是卖掉万达的文旅资产)开始,万达就开始了卖卖卖的模式,直至今日还没有完全停下来。 变卖资产,说明万达仍然有资金方面的强烈需求。万达究竟有多少负债?这一点万达一直讳莫如深,外界从不知道详细数据。而之前有很多媒体报道万达负债高达40...

有多少个明星是狮子座?

空口白言总觉得有些无力,还是先来一组不科学的数据图吧??? 绿色代表歌手?,蓝色代表负面新闻出现印象较深刻的 ?以下数据截图全是手动录入的,生日依据来自百度百科。不出错的话基本上就是这样。列出的都是一些当前我们比较熟悉的娱乐圈明星 ------------------ 仔细观察一下狮子座的明星你就会...

相互保分摊越来越多,大家觉得还有必要加入下去么?里面的钱到底如何了?

先来说说一些数据,全国每天确诊癌症约万例,全国人口14亿,加入相互保7000万人,换算下来,这七千万人,每天约有500人确诊。相互保半月一次,那就是7500人。因为加入相互保人群年轻生病几率小,刨去一半,还有3750人,再刨去病情轻,或者不符合如实告知等要求的,再减一半,还有约1800人。而现阶段支...

100兆网络下载速度4619kb/s正常吗?

首先了解位(bit),字节(byte)的含义与关系! 1byte=8bit,1byte约一个英文字母或半个汉字,再看看单位换算: 1KB=1024B,1MB=1024KB 100Mb/8bit=12.5Mbps 表示12.5M/s,也就是数据传输速度为12.5Mbyte每秒! 当然,这只是理论传输速...

你喜欢江西吗?

我是个贵州人,我深爱自己家乡。但我也很喜欢江西,江西虽然经济不发达,工业少。正因为工业少,所以江西环境,空气才那么好,地势平坦,没有那么多山区丘陵,江西旅游业发达,到处都是旅游景点,如果去江西,真可说得上是玩的无穷无尽, 截至2013年,江西共有共有5处世界遗产、6处国家遗产,3个世界地质公园[43...

嫦娥五号返回时有被别国截获的可能吗?

嫦娥五号返回时有被别国截获的可能吗?嫦娥五号发射后有两个事情让大家很是担心,第一个是有国外无线电爱好者截获了嫦娥五号的太阳能电池的监控数据,第二则是非常担心嫦娥五号的返回舱被别国截获! 我们首先给出答案,截获监控数据流是正常的,但截获嫦娥五号的返回舱,即使美国也做不到!为什么会这样,下文给出答案!...

你如何看待2019年春节档的总票房?

谢邀。 根据相关报道,2019年春节档,虽然被称为最强贺岁档,但是通过分析你会发现这是一个水分很大的春节档。 根据猫眼电影显示2019年春节电影票房为58.59亿,相较于去年57.7亿有小幅度提升。另外根据灯塔研究院的数据,2019年的春节档观影人数为1.3亿,同比下降了10%。 再看看各电影的票房...

魔兽世界9.0最新DPS数据,鸟德成“单体一哥”,惩戒骑被严重低估。如何评价这份数据?

在魔兽世界9.0版本开放之前,国服多位知名玩家在测试服进行了一次全职业DPS专精的测试,当时的测试结果是三布甲“封神”。而这份测试数据也成为了很多玩家选择首发职业的参考依据,然而在9.0版本开放一周之后,外服发布了一份最新的DPS职业排名(模拟数据),不过这份数据和测试服的数据却有着很大的差别。 9...

一架民航飞机有多重?

根据不同型号,来说说我们常见的民航客机有多重。这里每种机型列两个数据:前一个数据为飞机的使用空重,你可以理解为飞机在不载客、不载货、不载燃油情况下的重量。后一个数据为飞机的最大起飞重量,也就是飞机起飞机时设计允许的最大重量。 空客系列空客A319:40.8吨,75.5吨。 空客A319neo:42....

UC是什么意思?

统一通信 (简称UC即Unified Communications )是指把计算机技术与传统通信技术融为一体的新通信模式。作为一种解决方案和应用,其核心内容是:让人们无论任何时间、任何地点,都可以通过任何设备、任何网络,获得数据、图像和声音的自由通信。也就是说,统一通信系统将语音、传真、电子邮件、移...

大数据究竟是什么?大数据有哪些技术呢?

近几年,大数据的概念逐渐深入人心,大数据的趋势越来越火爆。但是,大数据到底是个啥?怎么样才能玩好大数据呢? 大数据的基本含义就是海量数据,麦肯锡全球研究所给出的定义是:一种规模大到在获取、存储、管理、分析方面大大超出了传统数据库软件工具能力范围的数据集合,具有海量的数据规模、快速的数据流转、多样的数...

大数据的含义和作用是什么?

大数据简单说就是现实世界数据化! 而大数据对于个人的意义就是:个人与信息的强结合,个人自带可信的信息。 就拿健康码来说,为什么绿码就能放行?为什么各个检查口看到绿码就放行?因为绿码 是携带了个人安全的健康信息,表示这个人是低风险的。 换句话说,健康码是个人信息的一部分,而且是可信的。 健康码的存在,...