看到不少qt下采用axcontainer组件进行office文档编辑的例子,但是往往可以修改文档但不能在qt的框架里进行可视编辑、浏览。近期有此类项目需求,笔者借用浏览器对文档的打开功能,将浏览器嵌入qt窗体,以曲线救国的方式完成了这个工作。
方法分为两步:
1. 使浏览器内支持文档打开
双击运行"浏览器中可以打开文档.reg"修改注册表(点击打开链接),经过此步,IE浏览器可以直接打开文档(通常情况下,将文件拖入IE,会调用相应程序去打开,而非嵌入IE中打开)。
2. 程序加载
我封装了一个窗体类,莫忘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”(点击打开链接)。
版权声明:本文为hanjiang08原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。