首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >QT调用IE浏览器COM插件完成网页浏览

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

作者头像
DS小龙哥
发布2022-01-12 13:45:43
发布2022-01-12 13:45:43
2.5K00
代码可运行
举报
运行总次数:0
代码可运行

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

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

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

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

二、实现方法

2.1 加载IE浏览器的COM组件

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

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

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

代码语言:javascript
代码运行次数:0
运行
复制
void axWidget_TitleChange(const QString &Text);

void axWidget_ProgressChange(int Progress, int ProgressMax);

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

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

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

2.2 widget.cpp

代码语言:javascript
代码运行次数:0
运行
复制
#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

代码语言:javascript
代码运行次数:0
运行
复制
#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文件

代码语言:javascript
代码运行次数:0
运行
复制
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
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/11/12 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、可用的嵌入式浏览器方案
  • 二、实现方法
    • 2.1 加载IE浏览器的COM组件
    • 2.2 widget.cpp
    • 2.3 widget.h
    • 2.4 xxx.pro文件
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档