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
目录
相关文章
|
10月前
|
XML Linux 数据格式
Qt对Word网页的读写功能实现
Qt对Word网页的读写功能实现
534 9
|
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下测试正常
|
Web App开发 前端开发 JavaScript
如何模拟浏览器行为获取网页中的隐藏表单数据?
如何模拟浏览器行为获取网页中的隐藏表单数据?
|
Web App开发 人工智能 JavaScript
Nanobrowser:开源版OpenAI Operator!AI自动操控浏览器,复杂网页任务一键搞定
Nanobrowser 是一款开源的 Chrome 扩展工具,基于多智能体系统实现复杂的网页任务自动化,支持多种大型语言模型,完全免费且注重隐私保护。
2470 1
|
人工智能 API 数据库
Browser Use:开源 AI 浏览器助手,自动完成网页交互任务,支持多标签页管理、视觉识别和内容提取等功能
Browser Use 是一款专为大语言模型设计的智能浏览器工具,支持多标签页管理、视觉识别、内容提取等功能,并能记录和重复执行特定动作,适用于多种应用场景。
4097 0
Browser Use:开源 AI 浏览器助手,自动完成网页交互任务,支持多标签页管理、视觉识别和内容提取等功能
|
计算机视觉
基于QT的opencv插件框架qtCvFrameLearn实战
这篇文章详细介绍了如何基于Qt框架开发一个名为qtCvFrameLearn的OpenCV插件,包括项目配置、插件加载、Qt与OpenCV图像转换,以及通过各个插件学习OpenCV函数的使用,如仿射变换、卡通效果、腐蚀、旋转和锐化等。
481 10
|
JavaScript 前端开发
|
C语言 C++ Windows
QT多插件通信框架CTK编译记录
本文记录了编译QT多插件通信框架CTK的过程,包括编译结果截图、部署配置、Log4Qt编译配置、参考链接和拓展资料。文中提供了详细的编译步骤和配置文件示例,以及相关的资源链接。
856 0
QT多插件通信框架CTK编译记录
|
网络协议 前端开发 JavaScript
浏览器加载网页的幕后之旅:从URL到页面展示详解
【8月更文挑战第31天】当在浏览器地址栏输入URL并回车后,一系列复杂过程随即启动,包括DNS解析、TCP连接建立、HTTP请求发送、服务器请求处理及响应返回,最后是浏览器页面渲染。这一流程涉及网络通信、服务器处理和客户端渲染等多个环节。通过示例代码,本文详细解释了每个步骤,帮助读者深入理解Web应用程序的工作机制,从而在开发过程中作出更优决策。
487 5