Qt窗体中嵌入office文档的新方法

看到不少qt下采用axcontainer组件进行office文档编辑的例子,但是往往可以修改文档但不能在qt的框架里进行可视编辑、浏览。近期有此类项目需求,笔者借用浏览器对文档的打开功能,将浏览器嵌入qt窗体,以曲线救国的方式完成了这个工作。

方法分为两步:

1. 使浏览器内支持文档打开

双击运行"浏览器中可以打开文档.reg"修改注册表(点击打开链接),经过此步,IE浏览器可以直接打开文档(通常情况下,将文件拖入IE,会调用相应程序去打开,而非嵌入IE中打开)。

Qt窗体中嵌入office文档的新方法_第1张图片


2. 程序加载

我封装了一个窗体类,莫忘pro文件中增加QT += axcontainer

具体代码webBrowser.h

#ifndef WEBBROWSER_H
#define WEBBROWSER_H

#include 
#include 


class WebBrowser : public QAxWidget
{
public:
    explicit WebBrowser(QWidget* parent = 0, Qt::WindowFlags f = 0);
    ~WebBrowser();
};

#endif // WEBBROWSER_H

webBrowser.cpp

#include "WebBrowser.h"
#include 
#include 

//如果使用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(){}

放一张效果图:

Qt窗体中嵌入office文档的新方法_第2张图片


ps:如果以后不想用浏览器直接打开文件,想调用对应的程序去打开,可以运行“恢复自带程序打开文档 浏览器不再打开.reg”(点击打开链接)。

你可能感兴趣的:(qt)