QT调用IE浏览器COM插件完成网页浏览

简介: QT调用IE浏览器COM插件完成网页浏览

一、可用的嵌入式浏览器方案

QT在5.6之前可以webkit浏览器框架访问网页,在之后就去掉了webkit,加入了QWebEngineView框架,但是QWebEngineView只能支持VS编译器,mingw编译器不支持。

在后面的高版本QT里,mingw编译器如果要加载网页可以使用两种方式。


(1). 编译webkit源码,使用webkit。 也可以不用自己编译,GitHub上可以下载编译好的库,直接下载使用即可。


下载地址: https://github.com/qtwebkit/qtwebkit/releases/tag/qtwebkit-5.212.0-alpha4

image.png

(2). 使用IE浏览器的COM插件,这个比较简单,也比较方便,就是IE浏览器目前不维护了。


本篇文章就介绍如何使用IE的COM插件完成网页浏览。分别都支持VS和MinGW编译器。


二、实现方法

2.1 加载IE浏览器的COM组件

打开UI设计界面,拖入一个axWidget控件,加载IE浏览器插件(Internet Explorer)。

image.png

image.png

image.png

右键选择转到槽,弹出菜单,可用选择需要使用的信号。

我这里就关联了两个信号,一个标题加载完成,一个是加载进度。

void axWidget_TitleChange(const QString &Text);
void axWidget_ProgressChange(int Progress, int ProgressMax);

最终实现的效果是,调用百度搜索指定的内容:

image.png

image.png

如果打开网页报错–脚本错误-JS加载错误之类的,需要设置IE浏览器的Intel安全设置,把活动脚本禁用即可。

image.png

(win10)按下win键,弹出左边的选项栏,找到windows附件,打开IE浏览器。

image.png

image.png

image.png

2.2 widget.cpp

#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    //导出支持调用的函数接口
    QString DOC = ui->axWidget->generateDocumentation();
    QFile outFile("com_function.html");
    outFile.open(QIODevice ::ReadWrite|QIODevice ::Text);
    QTextStream TS(&outFile);
    TS<<DOC<<endl;
    this->setWindowTitle("单词翻译");
}
Widget::~Widget()
{
    delete ui;
}
/*
工程: COM_InternetExplorer_Test
日期: 2021-10-29
作者: DS小龙哥
环境: win10 QT5.12.6 MinGW32
功能: 加载完成
*/
void Widget::on_axWidget_TitleChange(const QString &Text)
{
    qDebug()<<"Text:"<<Text;
}
/*
工程: COM_InternetExplorer_Test
日期: 2021-10-29
作者: DS小龙哥
环境: win10 QT5.12.6 MinGW32
功能: 加载进度改变
*/
void Widget::on_axWidget_ProgressChange(int Progress, int ProgressMax)
{
    qDebug()<<QString("%1:%2").arg(ProgressMax).arg(Progress);
}
void Widget::on_pushButton_clicked()
{
    QString url;
    url="https://www.baidu.com/s?ie=UTF-8&wd="+ui->lineEdit->text();
    QVariantList params ={url,0,"","",""};
    ui->axWidget->dynamicCall("Navigate2(QString, QVariant&, QVariant&, QVariant&, QVariant&)", params);
}

2.3 widget.h

#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QAxWidget>
#include <QDebug>
#include <QFile>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
    Q_OBJECT
public:
    Widget(QWidget *parent = nullptr);
    ~Widget();
private slots:
    void on_axWidget_TitleChange(const QString &Text);
    void on_axWidget_ProgressChange(int Progress, int ProgressMax);
    void on_pushButton_clicked();
private:
    Ui::Widget *ui;
};
#endif // WIDGET_H

2.4 xxx.pro文件

QT       += core gui
QT       += axcontainer
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
CONFIG += c++11
# The following define makes your compiler emit warnings if you use
# any Qt feature that has been marked deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS
# You can also make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0
SOURCES += \
    main.cpp \
    widget.cpp
HEADERS += \
    widget.h
FORMS += \
    widget.ui
# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
目录
相关文章
|
3月前
|
数据可视化 Java Windows
Elasticsearch入门-环境安装ES和Kibana以及ES-Head可视化插件和浏览器插件es-client
本文介绍了如何在Windows环境下安装Elasticsearch(ES)、Elasticsearch Head可视化插件和Kibana,以及如何配置ES的跨域问题,确保Kibana能够连接到ES集群,并提供了安装过程中可能遇到的问题及其解决方案。
Elasticsearch入门-环境安装ES和Kibana以及ES-Head可视化插件和浏览器插件es-client
|
3月前
|
Web App开发 JavaScript 前端开发
添加浮动按钮点击滚动到网页底部的纯JavaScript演示代码 IE9、11,Maxthon 1.6.7,Firefox30、31,360极速浏览器7.5.3.308下测试正常
添加浮动按钮点击滚动到网页底部的纯JavaScript演示代码 IE9、11,Maxthon 1.6.7,Firefox30、31,360极速浏览器7.5.3.308下测试正常
|
3月前
|
计算机视觉
基于QT的opencv插件框架qtCvFrameLearn实战
这篇文章详细介绍了如何基于Qt框架开发一个名为qtCvFrameLearn的OpenCV插件,包括项目配置、插件加载、Qt与OpenCV图像转换,以及通过各个插件学习OpenCV函数的使用,如仿射变换、卡通效果、腐蚀、旋转和锐化等。
61 10
|
3月前
|
C语言 C++ Windows
QT多插件通信框架CTK编译记录
本文记录了编译QT多插件通信框架CTK的过程,包括编译结果截图、部署配置、Log4Qt编译配置、参考链接和拓展资料。文中提供了详细的编译步骤和配置文件示例,以及相关的资源链接。
QT多插件通信框架CTK编译记录
|
3月前
|
安全 Oracle Java
edge浏览器加载java插件
edge浏览器加载java插件
251 1
|
4月前
|
网络协议 前端开发 JavaScript
浏览器加载网页的幕后之旅:从URL到页面展示详解
【8月更文挑战第31天】当在浏览器地址栏输入URL并回车后,一系列复杂过程随即启动,包括DNS解析、TCP连接建立、HTTP请求发送、服务器请求处理及响应返回,最后是浏览器页面渲染。这一流程涉及网络通信、服务器处理和客户端渲染等多个环节。通过示例代码,本文详细解释了每个步骤,帮助读者深入理解Web应用程序的工作机制,从而在开发过程中作出更优决策。
77 5
|
4月前
|
编解码 JavaScript 前端开发
JS逆向浏览器脱环境专题:事件学习和编写、DOM和BOM结构、指纹验证排查、代理自吐环境通杀环境检测、脱环境框架、脱环境插件解决
JS逆向浏览器脱环境专题:事件学习和编写、DOM和BOM结构、指纹验证排查、代理自吐环境通杀环境检测、脱环境框架、脱环境插件解决
139 1
|
4月前
|
存储 JavaScript
纯Vue实现网页日常任务清单小功能(数据存储在浏览器)
这篇文章介绍了如何使用纯Vue实现一个网页日常任务清单的小功能,数据存储在浏览器中以保持数据持久化。文章内容包括功能描述、效果演示、核心代码修改方法,以及已经打包好的项目源码下载链接。作者还提供了友情提示,指出了数据存储到浏览器的核心代码部分,方便读者快速理解和应用。
|
4月前
|
人工智能 自然语言处理 Linux
免费ChatGPT4o灵办AI可体验浏览器插件
灵办AI就是您所需的最佳助手!我们为您带来了一款多功能AI工具,ChatGPT4o不仅能为您提供精准翻译,还能满足您的对话需求、智能续写、AI搜索、文档阅读、代码生成与修正等多种需求。灵办 AI,真正让工作和学习变得轻松高效!一款多功能智能助手,旨在提升工作和学习效率。它提供实时翻译、对话问答、搜索、写作和网页阅读等服务,支持多种浏览器和操作系统,帮助用户随时获取信息,打破语言障碍,优化内容创作和信息处理。
139 0
|
Web App开发 前端开发 JavaScript