Qt窗体中嵌入office文档的新方法
看到不少qt下采用axcontainer组件进行office文档编辑的例子,但是往往可以修改文档但不能在qt的框架里进行可视编辑、浏览。近期有此类项目需求,笔者借用浏览器对文档的打开功能,将浏览器嵌入qt窗体,以曲线救国的方式完成了这个工作。
方法分为两步:
1. 使浏览器内支持文档打开
双击运行"浏览器中可以打开文档.reg"修改注册表(点击打开链接),经过此步,IE浏览器可以直接打开文档(通常情况下,将文件拖入IE,会调用相应程序去打开,而非嵌入IE中打开)。
我封装了一个窗体类,莫忘pro文件中增加QT += axcontainer
具体代码webBrowser.h
#ifndef WEBBROWSER_H #define WEBBROWSER_H #include <QAxWidget> #include <QAxObject> class WebBrowser : public QAxWidget { public: explicit WebBrowser(QWidget* parent = 0, Qt::WindowFlags f = 0); ~WebBrowser(); }; #endif // WEBBROWSER_H
webBrowser.cpp
#include "WebBrowser.h" #include <QDir> #include <QUrl> //如果使用VS编译器,需要将代码强制转换为UTF-8,并将文件保存为UTF-8编码,才能正确显示中文 #if defined(_MSC_VER)&&(_MSC_VER>=1600) #pragma execution_character_set("utf-8") #endif WebBrowser::WebBrowser(QWidget* parent, Qt::WindowFlags f):QAxWidget(parent,f) { //原理上是加载了web的组件,然后打开的office文档 this->setControl(QString::fromUtf8("{8856F961-340A-11D0-A96B-00C04FD705A2}")); //文件路径,相对当前路径 this->dynamicCall("Navigate(const QString&)",QDir::toNativeSeparators(QDir::currentPath()+"/data/ssd.ppt")); } WebBrowser::~WebBrowser(){}
放一张效果图:
ps:如果以后不想用浏览器直接打开文件,想调用对应的程序去打开,可以运行“恢复自带程序打开文档 浏览器不再打开.reg”(点击打开链接)。
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。