• 一QAxwidget操作office
  • 二QAxwidget操作pdf
  • 三总结

 承接上章,该扯皮的扯完了,直接进入正题:

顾名思义,这篇先介绍下QAxwidget来操作office和pdf
 QAxwidget,即一个ActiveX控件的qt版本,方便我们在qt程序中调用显示,可以直接调用com组件。关于QAxwidget的介绍,官网上有更详细的,可以自行查看:
QAxwidget官网介绍
此外,引用别人的一张图,能够更好理解继承结构:

传送门

开发环境:windows7+vs2013+qt5.4(32位)。

一、QAxwidget操作office:

 如果仅仅是使用QAxwidget来打开pdf文件还是较为简单的,网上也更多这方面的例子,但也基本上浅尝辄止,没有更深的内容了,很遗憾,我也是,如果要详细的api,需要直接去找com组件的api,但是我当时只看了pdf的api。

使用QAXwidget操作office文件时,必须电脑装有office,office2007以上都可以(03没试过,未知),同时qt5.7如果是调用dilaog打开文件来显示有效果,如果是直接load没效果,大约是一个bug。

准备工作:使用QAxwidget需要添加库:

QT       += axcontainer 

1、搞个简单的界面:

点击按钮打开个文件选择框(QFileDialog),根据选择文件来确定打开的文件格式

void MainWindow::on_pushButton_clicked()
{QFileDialog dialog;dialog.setFileMode(QFileDialog::ExistingFile);dialog.setViewMode(QFileDialog::Detail);dialog.setOption(QFileDialog::ReadOnly, true);dialog.setWindowTitle(QString("QAXwidget操作文件"));dialog.setDirectory(QString("./"));dialog.setNameFilter(QString("所有文件(*.*);;excel(*.xlsx);;word(*.docx *.doc);;pdf(*.pdf)"));if (dialog.exec()){//根据文件后缀打开QStringList files = dialog.selectedFiles();for(auto filename : files){if(filename.endsWith(".xlsx")){this->OpenExcel(filename);}else if(filename.endsWith(".docx") || filename.endsWith(".doc")){this->OpenWord(filename);}}}
}

2、根据所选择的文件打开:

void MainWindow::OpenExcel(QString &filename)
{this->CloseOffice();officeContent_ = new QAxWidget("Excel.Application", this->ui->widget);officeContent_->dynamicCall("SetVisible (bool Visible)","false");//不显示窗体officeContent_->setProperty("DisplayAlerts", false);auto rect = this->ui->widget->geometry();officeContent_-> setGeometry(rect);officeContent_->setControl(filename);officeContent_->show();
}void MainWindow::OpenWord(QString &filename)
{this->CloseOffice();officeContent_ = new QAxWidget("Word.Application", this->ui->widget);officeContent_->dynamicCall("SetVisible (bool Visible)","false");//不显示窗体officeContent_->setProperty("DisplayAlerts", false);auto rect = this->ui->widget->geometry();officeContent_-> setGeometry(rect);officeContent_->setControl(filename);officeContent_->show();
}

3、就打开了,效果如下(忽略word文档内容,以前的博客内容):

4、需要注意的是,使用完之后记得关干净,不然打开的word.exe还在进程。

void MainWindow::CloseOffice()
{if(this->officeContent_){officeContent_->close();officeContent_->clear();delete officeContent_;officeContent_ = nullptr;}
}

二、QAxwidget操作pdf:

 其实打开pdf也类似,在放弃office文件之后选择了打开pdf文件。
 注意,需要安装adobe pdf reader:

1、在打开文件后选择分支处加一个选项:

 else if(filename.endsWith(".docx") || filename.endsWith(".doc")){this->OpenWord(filename);}else if(filename.endsWith(".pdf")){this->OpenPdf(filename);}

2、打开pdf文件:
在布局上加一个类型gridLayout:

添加函数:

void MainWindow::OpenPdf(QString &filename)
{this->CloseOffice();officeContent_ = new QAxWidget(this);if(!officeContent_->setControl("Adobe PDF Reader"))QMessageBox::critical(this, "Error", "没有安装pdf!");this->ui->gridLayout->addWidget(officeContent_);officeContent_->dynamicCall("LoadFile(const QString&)",filename);
}

这里有点不一样了,不能通过打开office的方式来直接打开。
有兴趣的话可以翻看官方文档,我找了好久找到了:传送门

3、完事儿,打开效果如下:

三、总结:

 通过QAxwidget来操作office文件和pdf文件,有以下几点优缺点:
1、很方便显示这些,几乎没什么代码量,直接可以看到效果。
2、本质其实就是调用别的软件来显示,跟自己没半毛钱关系,屏蔽不了按键,不能让他无法编辑,无法复制,无法保存,故而弃之。
3、需要源码的话可以留评论,我再上传。

更新:
代码地址:
传送门

Qt显示pdf系列2——QAxWidget打开Office文件及pdf相关推荐

  1. android第三方打开office文件,Android应用集成Office文件能力完全攻略

    Android应用打开office和pdf文件.常用的有以下四种解决方案: 在线网页打开文件方案:通过微软或谷歌提供的在线页面打开office和pdf文件 集成相关文档处理开源库:通过集成开源库类似于 ...

  2. android 读取wps_安卓APP调用WPS打开Office文件并返回APP

    原创文章:转载请注明出处 安卓APP调用WPS打开Office文件并返回APP功能实现(附wps工具) 在某些app(如OA系统app)开发工程中,往往会遇到编辑Office文档的需求,而我们一般采取 ...

  3. 通过Jacob调用WPS将office文件转为PDF文件

    访问https://sourceforge.net/projects/jacob-project/ 想要调启Windows里的程序需要对应的dll库,下载之后解压 将符合你电脑的dll文件复制到jdk ...

  4. PHP实现office文件转PDF功能

            之前因为业务需要接触过在线浏览office文件,用过一些接口,例如:I DOC View(收费).Office Web 365(有免费版,详情可点击查看).online doc(有免费 ...

  5. python office转pdf_python 如何将office文件转换为PDF

    在平时的工作中,难免需要一些 小Tip 来解决工作中遇到的问题,今天的文章给大家安利一个方便快捷的小技巧,将 Office(doc/docx/ppt/pptx/xls/xlsx)文件批量或者单一文件转 ...

  6. office文件转换为pdf文件

    office文件转换为pdf文件 首先安装openoffice,自行百度 导入jar包,自行百度 引入坐标: <!-- 转pdf配置 --><dependency><gr ...

  7. word无法验证服务器,Win8系统打开office文件提示“无法验证此产品的许可证”如何解决...

    Office是办公室人员经常会用到的软件,而在使用过程中难免遇到一些情况,比如有win8系统用户在打开office文件的时候,却提示"无法验证此产品的许可证",这是怎么回事呢,现在 ...

  8. python office转pdf linux_python 如何将office文件转换为PDF

    在平时的工作中,难免需要一些 小Tip 来解决工作中遇到的问题,今天的文章给大家安利一个方便快捷的小技巧,将 Office(doc/docx/ppt/pptx/xls/xlsx)文件批量或者单一文件转 ...

  9. python win32转pdf 横版_Python 小技巧之 Office 文件转 PDF

    文章来源于公众号:Python技术 作者:派森酱 在日常的生活工作中,难免需要用到一些 小Tip 来解决工作中遇到的小难题,今天的文章给大家安利一个方便快捷的小技巧,将 Office(doc/docx ...

最新文章

  1. 用缓存拦截接口频繁的请求
  2. scrapy-splash抓取动态数据例子八
  3. 【PM模块】预防性维护(下)
  4. 【数据结构与算法】之深入解析“外观数列”的求解思路与算法示例
  5. 极路由2 root及校园802.1x拨号经验帖(西南校园)
  6. 告白——一个loser的手记
  7. cdn转发防攻击_一个既可以加速又可以防御的CDN产品
  8. 【干货】推荐系统解构.pdf(附下载链接)
  9. 根据成交量变化寻找黑马
  10. 真不好意思,让你贱笑了
  11. Python爬虫实践(二) -- 爬虫进阶:爬取数据处理、数据库存储
  12. 用python画散点图
  13. 在excel 同时冻结行和列
  14. 根据已订房客人资料快速登记
  15. 利用JS模拟排队系统
  16. 音量控制面板项目说明
  17. 无利不起早:理性看待IBM倾“芯”中国
  18. 投影仪怎么看电视直播?安装这些软件带你共享2022世界杯盛宴
  19. ERRno::ECONNRESTE: An existing connection was forcibly closed by the remote
  20. 求字符串中的回文数或者是回文单词

热门文章

  1. 「解析」牛客网-华为机考企业真题 41-60
  2. 微信小程序登录与服务器交换数据的流程
  3. 华为交换机重置console账户密码(恢复出厂设置)
  4. VB编程:DO...Loop循环语句比较最大最小值-16
  5. Android 原生控件ViewFlipper实现淘宝头条垂直滚动广告条
  6. EAP和EAPOL资料
  7. 2018 Unreal Open Day参会总结
  8. ~!#$%^*这些符号怎么读? 当然是用英语(键盘特殊符号小结)
  9. 【管理学】作业与思考题
  10. Java数据库建立学生表