最近一段时间真是事情太多了,前不久项目中一个嵌入office软件的问题,由于没有时间研究,且项目的需求是浏览word文档,偷了一个懒,把word文档转换成pdf文档,然后嵌入libcef浏览器给打开了

现在回过头来,重新研究了这方面的直接办法,在网上查了多方面的资料,终于决定要使用ocx这个方案来完成此项功能,可限于资源问题,ocx方面的资料 没怎么接触过,所以就盲目的在晚上看别人的东西,不过皇天不负有心人,最终还是让我成功的搞定了这个问题,然后觉着,这个ocx也不过如此么,总的来说说 还是比较简单

我当前机器环境:windwos7 64位  dsoframer 1.3 qt5.5.1 vs2013

下边我说下我自己的步骤:

1、下载dsoframer.ocx,然后使用命令注册regsvr32.exe dsoframer.ocx

2、运行regedit.exe 在HKEY_LOCAL_MACHINE目录下搜索dsoframer,获取CLSID的值,这个是用作ocx的唯一标示,如果没有搜索到,可以下载其他的dsoframer,重新注册,或者给我留言

3、接下来直接上代码

 QAxWidget * _Word = new QAxWidget(this);

 _Word->setControl("{00460182-9E5E-11d5-B7C8-B8269041DD57}");

 _Word->setProperty("Visible", true);

 QString filePath = QFileDialog::getOpenFileName(, "Open doc file", QString(), "*.doc");

 if (filePath.isEmpty())

 return;

 _Word->dynamicCall("Open(string)", filePath);

 _Word->dynamicCall("SetCaption(string)", "ocx test");

 _Word->dynamicCall("SetMenuAccelerators(bool)", false);

 _Word->dynamicCall("SetMenubar(bool)", false);

 QGridLayout * ply = new QGridLayout(this);

 ply->addWidget(_Word, , , , );

 ply->setContentsMargins(, , , );

 ui.widget->setLayout(ply);

效果图如下:

dsoframer.ocx打开office软件

dsoframer的相关接口,不过常用的也就那么几个

BeforeDocumentClosed(IDispatch*,bool&) Document,Cancel

BeforeDocumentSaved(IDispatch*,QString,bool&) Document,Location,Cancel

OnActivationChange(bool) fGoingActive

OnDocumentClosed()

OnDocumentOpened(QString,IDispatch*) File,Document

OnFileCommand(dsoFileCommandType,bool&) Item,Cancel

OnPrintPreviewExit()

OnSaveCompleted(IDispatch*,QString,QString) Document,DocName,FullFileLocation

exception(int,QString,QString,QString) code,source,disc,help

propertyChanged(QString) name

signal(QString,int,void*) name,argc,argv

Activate()

Close()

CreateNew(QString) ProgIdOrTemplate

EnableFileCommand(dsoFileCommandType) Item bool

ExecOleCommand(int) OLECMDID

ExecOleCommand(int,QVariant) OLECMDID,Options

ExecOleCommand(int,QVariant,QVariant&) OLECMDID,Options,vInParam

ExecOleCommand(int,QVariant,QVariant&,QVariant&)  OLECMDID,Options,vInParam,vInOutParam

GetDataObjectContent(QVariant) ClipFormatNameOrNumber QVariant

Open(QVariant) Document

Open(QVariant,QVariant) Document,ReadOnly

Open(QVariant,QVariant,QVariant)    Document,ReadOnly,ProgId

Open(QVariant,QVariant,QVariant,QVariant)Document,ReadOnly,ProgId,WebUsername

Open(QVariant,QVariant,QVariant,QVariant,QVariant) Document,ReadOnly,ProgId,WebUsername,WebPassword

PrintOut()

PrintOut(QVariant) PromptUser

PrintOut(QVariant,QVariant) PromptUser,PrinterName

PrintOut(QVariant,QVariant,QVariant) PromptUser,PrinterName,Copies

PrintOut(QVariant,QVariant,QVariant,QVariant)

PromptUser,PrinterName,Copies,FromPage

PrintOut(QVariant,QVariant,QVariant,QVariant,QVariant) PromptUser,PrinterName,Copies,FromPage,ToPage

PrintOut(QVariant,QVariant,QVariant,QVariant,QVariant,QVariant)  PromptUser,PrinterName,Copies,FromPage,ToPage,OutputFile

PrintPreview()

PrintPreviewExit()

Save()

Save(QVariant) SaveAsDocument

Save(QVariant,QVariant) SaveAsDocument,OverwriteExisting

Save(QVariant,QVariant,QVariant)

SaveAsDocument,OverwriteExisting,WebUsername

Save(QVariant,QVariant,QVariant,QVariant) SaveAsDocument,OverwriteExisting,WebUsername,WebPassword

SetActivationPolicy(dsoActivationPolicy) ActivationPolicy

SetBackColor(QColor) BackColor

SetBorderColor(QColor) BorderColor

SetBorderStyle(dsoBorderStyle) BorderStyle

SetCaption(QString) Caption

SetDataObjectContent(QVariant,QVariant) ClipFormatNameOrNumber,DataByteArray

SetEnableFileCommand(dsoFileCommandType,bool) Item,rhs

SetEventsEnabled(bool) EventsEnabled

SetForeColor(QColor) ForeColor

SetFrameHookPolicy(dsoFrameHookPolicy) FrameHookPolicy

SetHostName(QString)HostName

SetLockServer(bool) LockServer

SetMenuAccelerators(bool) MenuAccelerators

SetMenubar(bool) Menubar SetModalState(bool) ModalState

SetTitlebar(bool) Titlebar

SetTitlebarColor(QColor) TitlebarColor

SetTitlebarTextColor(QColor) TitlebarTextColor

SetToolbars(bool) Toolbars

ShowDialog(dsoShowDialogType) DlgType

_PrintOutOld()

_PrintOutOld(QVariant) PromptToSelectPrinter

如果想看哪种方法调用失败或者是异常,请参考C++ gui程序附加dos输出窗口

注:需要完整事例的可以给我留言

如果您觉得文章不错,不妨给个打赏,写作不易,感谢各位的支持。您的支持是我最大的动力,谢谢!!! 

 

很重要--转载声明

  1. 本站文章无特别说明,皆为原创,版权所有,转载时请用链接的方式,给出原文出处。同时写上原作者:朝十晚八 or Twowords
  2. 如要转载,请原文转载,如在转载时修改本文,请事先告知,谢绝在转载时通过修改本文达到有利于转载者的目的。

qt集成dsoframer.ocx打开office办公软件的更多相关文章

  1. Office办公软件Excel使用整理

    Office办公软件Excel使用整理 Excel默认打印预览于当前连接的打印机的纸张大小保持一致. Excel sheet不见了怎么办 -------------- 设置Excel第二页打印开始的位 ...

  2. 各版本Office办公软件下载

    各版本Office办公软件下载:http://pan.baidu.com/share/home?uk=1174874628

  3. Office办公软件(Excel PPT Word)使用整理

    Office办公软件(Excel PPT Word)使用整理.. -------------- Excel默认打印预览于当前连接的打印机的纸张大小保持一致. Excel sheet不见了怎么办 --- ...

  4. Linux常用Office办公软件

    1.WPS Office是由金山软件股份有限公司自主研发的一款办公软件套件,可以实现办公最常用的文字.表格.演示等多种功能.免费提供海量的在线存储空间及文档模板.支持阅读和输出PDF文件.全面兼容Mi ...

  5. 【项目经验】macpro上安装office办公软件并破解

    链接: https://pan.baidu.com/s/1i5hyKO9 密码: 7zjf 如果本机原有office,先卸载 双击pkg文件安装office for Mac 2016 安装完不要做打开 ...

  6. qt: 系统默认程序打开文件或者软件;

    Qt提供了QDesktopServices类, 可以利用openUrl函数调用默认程序打开文件: 源码参考: #ifdef Q_OS_WIN32 m_szHelpDoc = QString(" ...

  7. Office办公软件各版本下载(一键安装)

    史上最快最全的Office套件,含Word.PPT.Excel.Access.Outlook完整组件(微软官方版本). 推荐安装Office2010版本!一键完成清理.安装Office.自动激活. 图 ...

  8. 自己的系统重装之后,怎么去重新的装官方的office办公软件,详细教程

    1  访问官网地址--微软,并通过自己的微软账号进行登录,转到下面的界面 2   点击上图的菜单栏的offce菜单项,跳转到下图 3  点击  菜单栏的产品  之后选择  查看office的全部的历史 ...

  9. 全套Office办公软件WORD/PPT/EXCEL视频教程 每日更新中

    详情见Processon分享链接:https://www.processon.com/view/link/5b3f40abe4b09a67415e2bfc

随机推荐

  1. 咸鱼入门到放弃12--Filter(过滤器)*

    一.Filter简介 Filter也称之为过滤器,它是Servlet技术中最激动人心的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态 ...

  2. Alpha冲刺(1/10)——2019.4.23

    作业描述 课程 软件工程1916|W(福州大学) 团队名称 修!咻咻! 作业要求 项目Alpha冲刺(团队) 团队目标 切实可行的计算机协会维修预约平台 开发工具 Eclipse 团队信息 队员学号 ...

  3. 使用Cordova打包Vue项目

    因为公司项目要求, 原本的vue移动端项目, 现在要求能使用定位, 调用摄像头等功能, 并且开发成混合APP. 一个小白的孤军奋战史, 记录一下, 以备后用.... 第一步: 安装cordova 在命 ...

  4. 【spring】-- jsr303参数校验器

    一.为什么要进行参数校验? 当我们在服务端控制器接受前台数据时,肯定首先要对数据进行参数验证,判断参数是否为空?是否为电话号码?是否为邮箱格式?等等. 这里有个问题要注意: 前端代码一般上会对这些数据 ...

  5. Objective-C中整数与字符串的相互转换

    2013/4/15整理: 将整数转换成字符串 Convert Integer to NSString: 方法一: int Value = 112233; NSString *ValueString = ...

  6. 关于DataTable序列化的事儿

    今天写了一个小demo,从数据库中读取到了dataTable,想序列化成json字符串,然后传到前端,进行页面展示,其实很简单的一个步骤,谁知道它出错了!!! 出错的原因是:序列化类型为XX的对象时检 ...

  7. Vray

    VRay是由chaosgroup和asgvis公司出品,中国由曼恒公司负责推广的一款高质量渲染软件.

  8. Java-IO流之转换流的使用和编码与解码原理

    一.理论: 1.字符流和字节流区别是什么? 字符流=字节流+编码集,在实际读取的时候其实字符流还是按照字节来读取,但是会更具编码集进行查找编码集字典解析相应的字节,使得一次读取出一个字符: 2.什么是 ...

  9. [AtCoder3856]Ice Rink Game - 模拟

    Problem Statement An adult game master and N children are playing a game on an ice rink. The game co ...

  10. ES6新增的常用数组方法(forEach,map,filter,every,some)

    ES6新增的常用数组方法 let arr = [1, 2, 3, 2, 1]; 一 forEach => 遍历数组 arr.forEach((v, i) => { console.log( ...