网站首页 > 博客文章 正文
工作过程中,需要通过代码读取excel文档信息,因此,经过搜索从网络下载开源库QXlsx来实现, 从实际的验证过程中,QXlsx支持windows、linux平台,不但能够读取excel文档,而且可以格式化excel文档,设置文档的字体类型,字体大小、字体颜色,对齐方式等。
但是它有一个不好的地方,就是使用的时候,QtCreator创建的工程中pro文件需要加入gui-private, Qt官方不推荐使用的 gui-private, 并且如果升级Qt版本,gui-private提供的接口就有可能不能使用或者被删除,Qt官方不保证gui-private的稳定。
所以,决定消除QXlsx使用QZipReader和QZipWriter这种私有的方法,通过尝试和研究,最终成功解决了这个问题。本文将记录其解决的过程方法,作为经验的积累和以后其他类似问题解决的借鉴。
一、前期准备工作
通过阅读QXlsx中ZipReader和ZipWriter源代码,ZipReader和ZipWriter类内部封装了Qt私有接口QZipReader和QZipWriter,而QZipReader的功能就是解压读取zip文件,QZipWriter写入文件并压缩成zip文件。因此,如果需要消除QZipReader和QZipWriter,那么首先需要找到QZipReader和QZipWriter的代替品,然后实现ZipReader和ZipWriter的功能。
通过网络搜索找到Zip Utils简化版本的zip库,它支持C++,具体下载地址可以从网上搜索下载。
1、如果是在linux系统上使用,需要添加ZIP_STD宏,例如我是在QtCreator工具上使用,那么在pro文件添加如下所示的信息
2、如果是在window上使用,经验证可能需要添加部分接口,有编译的问题,欢迎留言一起探讨。
3、如果是在mac系统上使用,那么unzip.cpp文件中malloc.h需要修改为stdlib.h, 为了跨平台的使用,可以按照如下所示的方式进行修改
4、ZipReader的头文件定义
5、ZipWriter的头文件定义
二、读取类的消除
1、修改ZipReader头文件, 其中添加USE_LOCAL_ZIP是为了方便开启和关闭我们自己加入zip utils库,如果定义了USE_LOCAL_ZIP,那么使用我们自己加入的zip utils库,否则使用原来的类。另外对比ZipReader前后修改的头文件,可以发现主要的修改就是将QZipReader修改为HZIP。
2、实现ZipReader类,其中需要注意的点:1> 传入的QIODevice需要先close, 再调用zip库的接口OpenZip才能打开成功; 2> QString类型的字符串转换为char *类型,需要先调用toUtf8。
三、写入类的消除
1、修改ZipWriter头文件, 对比ZipWriter前后修改的头文件,可以发现主要的修改就是将QZipWriter修改为HZIP。
2、实现ZipWriter类,其中需要注意的点:1> 传入的QIODevice需要先close, 再调用zip库的接口CreateZip才能创建成功; 2> QString类型的字符串转换为char *类型,需要先调用toUtf8。
四、总结
总的来说,消除私有方法,首先需要找到代替的类,如果是简单的功能,可以考虑自己实现,否则试试从网络上查找相关的开源代码。接着就是利用代替类重新实现相同的接口,另外,最好提前写好测试类,方便对比测试前后修改的功能。最后需要注意unicode字符类型和utf8字符类型的转换,否则有可能出现程序崩溃,功能不正常等问题。
猜你喜欢
- 2024-09-08 Qt 贪吃蛇制作(含源码)(qt编写贪吃蛇)
- 2024-09-08 qt 提示“启动程序失败,路径或者权限错误?”解决方法
- 2024-09-08 电脑文件不小心删除了怎么办?两个方法教你秒恢复
- 2024-09-08 Qt——内存回收(qti内存)
- 2024-09-08 C++跨平台库QT学习 操作Excel(跨平台c++开发工具)
- 2024-09-08 Qt 工程 pro文件(qt工程文件.pro在哪儿找)
- 2024-09-08 Qt中的快捷键汇总(qtcreator快捷键)
- 2024-09-08 Qt中文乱码解决思路(vscode终端中文乱码怎么解决)
- 2024-09-08 Qt5+VS2015编程实例:下拉列表框QComboBox控件使用
- 2024-09-08 Qt编程进阶(87):基于HTTP协议的网络文件下载
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- powershellfor (55)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)