【Qt】有一种Bug叫“麻烦制造者——福昕PDF阅读器”
使用Qt的QAxObject类基于“Microsoft Excel 2007”和“WPS表格”做二次开发(以下将两者称为Excel)。以下代码在基于“WPS表格”二次开发下工作正常,et.exe进程(WPS表格进程)能正常退出。在我开发电脑上,以下代码基于“Microsoft Excel 2007”也工作正常,能到达预期效果。
但是,提交到测试人员处却发现,以下代码基于“Microsoft Excel 2007”工作不正常。不正常情况有二:
当 mpExcel->setProperty("Visible", false); Excel软件设置为不可见
其一:mpWorkbooks->dynamicCall("Open(const QString&)", QVariant(msXlsFile))
提示QAxBase: Error calling IDispatch member Open: Unknown error
其二:mpExcel->dynamicCall("Quit()")
EXCEL.exe进程根本没有退出(任务管理器中仍然可见)。
::OleInitialize(0);QString msXlsFile("E:/QtWrokSpace/Bin/V1.0.xls");
//QAxObject *mpExcel = new QAxObject("et.application");
QAxObject *mpExcel = new QAxObject("excel.application");
mpExcel->setProperty("Visible", false);QAxObject *mpWorkbooks = mpExcel->querySubObject("WorkBooks");// 1.打开表格文件(注意:表格文件采用绝对路径)
mpWorkbooks->dynamicCall("Open(const QString&)", QVariant(msXlsFile));// 2.查询当前活动表格文件(即Open中打开的文件)对象‘ActiveWorkBook’
QAxObject *mpWorkbook = mpExcel->querySubObject("ActiveWorkBook");// 3.切换到指定的sheet
QAxObject *mpWorksheet = mpWorkbook->querySubObject("WorkSheets(int)", 1);// 4.获取该sheet的数据范围(可以理解为有数据的矩形区域)对象
QAxObject *usedrange = mpWorksheet->querySubObject("UsedRange");// 5.获取行/列对象
QAxObject *rows = usedrange->querySubObject("Rows");
QAxObject *columns = usedrange->querySubObject("Columns");// 6.开始的行/列索引
int mnStartRow = usedrange->property("Row").toInt();
int mnStartColumn = usedrange->property("Column").toInt();
// 7.该sheet的总行/列数
int mnRowCount = rows->property("Count").toInt();
int mnColumnCount = columns->property("Count").toInt();// 8.关闭workbook
mpWorkbook->dynamicCall("Close(Boolean)", false);
// 9.退出Excel
mpExcel->dynamicCall("Quit()");// 10.释放COM对象
delete rows;
delete columns;
delete usedrange;
delete mpWorksheet;
delete mpWorkbook;
delete mpWorkbooks;
delete mpExcel;::OleUninitialize();
有人说是因为COM对象没有释放,某些引用计数不为0,造成Quit()后EXCEL.exe不会退出!于是仔细调整代码,但凡用到querySubObject()查询到的指针都delete掉。结果仍然是EXCEL.exe进程无法退出,Open(.xls)失败!
从百度到Google,两天翻了好多相关字眼的文章、博客、论坛、Wiki、A&Q,各种原因方案没有一个能解决上述问题!
在接近崩溃边缘,在百度里“QAxBase: Error calling IDispatch member Open: Unknown error”查了这么句提示。在以前不屑一顾的贴吧里面找到了答案!
http://tieba.baidu.com/p/4427699896
根据这个不起眼的信息,去测试人员电脑检查,果真发现“福昕PDF阅读器”(真不知道是哪来的垃圾软件),更让人无语的是一群测试个个多装了这玩意!
兜兜转转谁知道是一个无名软件引发的不解Bug之谜!
题外话:
在卸载“福昕PDF阅读器”时,出现下面一幕,莫名的让人觉得开发这个软件的公司是多么垃圾!
【Qt】有一种Bug叫“麻烦制造者——福昕PDF阅读器”相关推荐
- 小功能解决小麻烦,福昕PDF阅读器仿真放大镜功能详解
在日常工作学习及娱乐总有遇到PDF文档不放大字看不清楚,放大了又需要拖来拖去的情况,十分的麻烦.其实这种麻烦只需要一个小功能就可以解决,那就是福昕阅读器中的"仿真放大镜",使用起来 ...
- 基于MuPDF和Qt的PDF阅读器的开发
基于MuPDF和Qt的PDF阅读器的开发 一.引言 设备上要渲染显示PDF文档,类似Adobe Reader.福昕阅读器等软件.如何去实现?Handling PDF这篇文档讨论介绍了在Qt应用程序中各 ...
- QT开发的pdf阅读器资料
详细说明:基于QT的一款建议pdf阅读器,可以进行移植,可以再pc上运行.-Recommendations based on QT' s a pdf reader, can be transplant ...
- qt实现的pdf阅读器(二)--XpdfReader在linux下的编译
目录 1.简介 2.需求说明 3.编译 3.3. 下载源码 3.2. 移植安装包和依赖库 3.2.1 准备工作 3.3.2 了解 3.3.3 编译并安装zlib 3.3.4 编译并安装libpng 3 ...
- 基于qt与mupdf库的pdf阅读器开发
pdf阅读器 下载mupdf源码 编译mupdf源码 qt工程链接mupdf源码静态库 参照 mupdf/docs/examples/example.c 开发 mainwindows.ui mainw ...
- Qt 使用Poppler实现pdf阅读器
开发环境 Qt5.5.1.Qt Creator 3.5.1 Qt实现pdf阅读器和MFC实现pdf阅读器,其实原理都是差不多的. 需要用到Poppler开源库,下载地址如下 https://poppl ...
- Foxit pdf阅读器不及时释放文件的bug解决
更少文章见我的博客:http://yanke23.tk 福昕阅读器 7.1.1免费版,系统为win8.1. 问题:如果打开多个标签,然后关闭其中一个,想要重命名或删除这个被关闭 的文件的话,是不行的, ...
- qt实现的PDF阅读器(四)——Quick
1.前言说明 qt-pdf-viewer-library是PDF .js库的qml包装,可以再在WebView中呈现PDF文件. 这个库也适用于Android设备,它使用WebSocketServer ...
- 在打造 iPod 和 Nest 之后,这位被硅谷抛弃的「麻烦制造者」正在巴黎重建浪潮之巅
「麻烦制造者」的舞台 在伦敦郊外的一处庄园,Tony Fadell 正在参加一场创始人论坛.宾客名单中有许多科技公司的创始人,也有拥有大英帝国勋章的初级军官.但实际上,这场会议的焦点人物是 Fadel ...
最新文章
- 常用的网络配置命令 ifconfig 所在的包
- 怎么把快捷键改成eclipse_Java IDE超好用的10个快捷键
- bal插口_EBS R12各模块接口表大全
- [转载]:TRY...CATCH (Transact-SQL)
- JDK 12的String :: transform方法的简要但复杂的历史
- Java多线程——重入锁ReentrantLock源码阅读
- python函数定义及调用-Python:函数定义和调用时都加*,有什么作用?
- Sqlserver自动优化
- 【翻译】3D Bounding Box Estimation Using Deep Learning and Geometry
- Intellij IDEA2017安装破解
- 神经网络在线和离线的区别,神经网络网站
- mysql监控工具-PMM,让你更上一层楼(上)
- 计算机毕业设计之疫情防疫信息化管理系统
- 基于C# winform实现随机点名小工具(支持csv导入)
- 1月1号开始租房一年期到几号_先承认我迷糊。现在请帮忙,租房合同中从7月1日起到次年的几月几日是一年日期?是6月31日还是7月31日...
- 怎么把wps转换成word
- 家谱宗族网站源码_家谱管理系统(源代码)
- java的时间日期类_Java基础学习:日期时间类
- CORBA的简单介绍及HelloWorld
- android 消息轮训,Android消息机制Handler,有必要再讲一次
热门文章
- 5月15日----疯狂猜成语-----三周第三次站立会议 参会人员:杨霏,袁雪,胡潇丹,郭林林,尹亚男,赵静娜...
- 3D全景具备哪些特点?又有哪些有趣的交互功能?
- 来点干货!3招Python 处理CSV、JSON和XML数据的简便方法!
- android 常见数据存储
- 帆软如何把两个表格分页显示
- 美国计算机科学专业硕士毕业薪,美国硕士毕业生薪水最高的10种专业
- Typora+PicGo图床配置(超详步骤教学)
- Fragment详解(一)
- 【Android Fragment】Fragment基础
- H.264裸流文件中获取每一帧数据