采用QWebEngineView引擎设计web浏览器

简介: 采用QWebEngineView引擎设计web浏览器

一、介绍

QWebEngineView 是QT5.4版本加入的新浏览器引擎,用于编辑、查看web内容。


在windows系统下 QWebEngineView支持MSVC编译器编译、不支持mingw编译。


使用QWebEngineView时,需要在工程文件里增加webenginewidgets模块的引用,并加上#include <QWebEngineView> 头文件。

Header:
#include <QWebEngineView> 
qmake:
QT += webenginewidgets
Since:
Qt 5.4
Inherits:
QWidget

下面是来至官方文档翻译:

image.png

QWebEngineView简单使用的示例代码:

QWebEngineView *view = new QWebEngineView(parent);
view->load(QUrl("http://qt-project.org/"));
view->show();

QWebEngineView类常用的几个接口介绍:

公共的函数:
1. 网页上查找文本
void  findText(const QString &subString, QWebEnginePage::FindFlags options = ..., const QWebEngineCallback<bool> &resultCallback = ...)
返回当前选定的文本
QString selectedText() const
2. 此属性保存此页面是否包含选定内容。
bool hasSelection() const
3. 返回指向已导航网页的视图历史记录的指针。
QWebEngineHistory *history() const
4. 返回当前网页图标
QIcon icon() const
5. 返回当前网页图标地址
QUrl iconUrl() const
6. 加载新的网页地址
void load(const QUrl &url)
7. 加载新的请求
void load(const QWebEngineHttpRequest &request)
8.  返回指向当前网页的指针。
QWebEnginePage *page() const
9. 返回指向封装指定web操作的QAction的指针。
QAction *pageAction(QWebEnginePage::WebAction action) const
10. 将web视图的内容设置为数据
void setContent(const QByteArray &data, const QString &mimeType = QString(), const QUrl &baseUrl = QUrl())
11. 设置HTML内容
void setHtml(const QString &html, const QUrl &baseUrl = QUrl())
12. 设置页: 使网页成为web视图的新网页。
void setPage(QWebEnginePage *page)
13. 设置新的地址
void setUrl(const QUrl &url)
QUrl url() const
14. 设置缩放属性
void setZoomFactor(qreal factor)
qreal zoomFactor() const
15.返回指向视图或页面特定设置对象的指针。
QWebEngineSettings *settings() const
16. 当前网页标题
QString title() const
17. 触发指定的操作。
void triggerPageAction(QWebEnginePage::WebAction action, bool checked = false)
方便的槽函数:
void back()    返回上一步页面-没有就没反应
void forward() 返回下一步页面-没有就没反应
void reload()  重新加载当前网页-刷新网页
void stop()    停止网页加载
可以关联的信号:
1. 图标发生改变
void iconChanged(const QIcon &icon)  
void iconUrlChanged(const QUrl &url)
2. 加载完成
void loadFinished(bool ok)
3. 加载进度 0~100
void loadProgress(int progress)
4. 该信号在页面的新加载开始时发出。
void loadStarted()
5. 当渲染过程以非零退出状态终止时,将发出此信号。terminationStatus是进程的终止状态,exitCode是进程终止时使用的状态代码。
void renderProcessTerminated(QWebEnginePage::RenderProcessTerminationStatus terminationStatus, int exitCode)
6. 只要选择发生变化,就会发出该信号。
注意:当使用鼠标通过左键单击和拖动选择文本时,将为每个选定的新字符发出信号,而不是释放鼠标左键。
void selectionChanged()
7. 标题改变
void titleChanged(const QString &title)
8. url改变
void urlChanged(const QUrl &url)

二、设计程序、完成网页浏览

当前的环境:

windows10 64 系统、QT5.12.6 + VS2017

运行效果:

image.png

image.png

image.png

image.png

2.1 新建工程

(1) 在创建工程时,选择VS编译器。

image.png

(2) 创建完毕之后,在pro工程文件里添加webenginewidgets模块。

QT += webenginewidgets

2.2 设计UI界面

image.png

2.3 widget.cpp

#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    //new 一个QWebEngineView
    m_webView = new QWebEngineView(this);
    //添加到布局器
    ui->verticalLayout_web->addWidget(m_webView);
    //关联信号
    connect(m_webView, SIGNAL(iconChanged(const QIcon &)), this, SLOT(slot_iconChanged(const QIcon &)));
    connect(m_webView, SIGNAL(loadProgress(int)), this, SLOT(slot_loadProgress(int)));
    connect(m_webView, SIGNAL(titleChanged(const QString &)), this, SLOT(slot_titleChanged(const QString &)));
    ui->progressBar->setMaximum(100);
    ui->progressBar->setMinimum(0);
}
Widget::~Widget()
{
    delete ui;
}
//刷新网页
void Widget::on_pushButton_new_clicked()
{
     ui->progressBar->setValue(0);
     m_webView->reload();
}
//加载新页面
void Widget::on_pushButton_load_clicked()
{
    QString url=ui->lineEdit->text();
    if(!url.isEmpty())
    {
        ui->progressBar->setValue(0);
        m_webView->load(QUrl(url));
    }
}
//停止
void Widget::on_pushButton_stop_clicked()
{
     m_webView->stop();
}
//上一页
void Widget::on_pushButton_up_clicked()
{
    m_webView->back();
}
//下一页
void Widget::on_pushButton_dn_clicked()
{
    m_webView->forward();
}
//图标改变
void Widget::slot_iconChanged(const QIcon &icon)
{
    this->setWindowIcon(icon);
}
//加载进度
void Widget::slot_loadProgress(int progress)
{
    ui->progressBar->setValue(progress);
}
//标题改变
void Widget::slot_titleChanged(const QString &title)
{
    this->setWindowTitle(title);
}

2.4 widget.h

#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QWebEngineView>
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 slot_iconChanged(const QIcon &icon);
    void slot_loadProgress(int progress);
    void slot_titleChanged(const QString &title);
    void on_pushButton_new_clicked();
    void on_pushButton_load_clicked();
    void on_pushButton_stop_clicked();
    void on_pushButton_up_clicked();
    void on_pushButton_dn_clicked();
private:
    Ui::Widget *ui;
    QWebEngineView *m_webView;
};
#endif // WIDGET_H

2.5 xxx.pro

QT       += core gui
QT       += webenginewidgets
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月前
|
Web App开发 iOS开发
Web 浏览器
【8月更文挑战第27天】Web 浏览器。
57 2
|
1月前
|
Web App开发 XML JavaScript
Python 操作浏览器:让 Python 和 Web 世界合二为一
Python 操作浏览器:让 Python 和 Web 世界合二为一
|
6月前
|
存储 搜索推荐 安全
Cookie 探秘:了解 Web 浏览器中的小甜饼
Cookie 探秘:了解 Web 浏览器中的小甜饼
|
3月前
|
开发者 搜索推荐 Java
超越传统:JSF自定义标签库如何成为现代Web开发的个性化引擎
【8月更文挑战第31天】JavaServer Faces(JSF)框架支持通过自定义标签库扩展其内置组件,以满足特定业务需求。这涉及创建`.taglib`文件定义标签库及组件,并实现对应的Java类与渲染器。本文介绍如何构建和应用JSF自定义标签库,包括定义标签库、实现标签类与渲染器逻辑,以及在JSF页面中使用这些自定义标签,从而提升代码复用性和可维护性,助力开发更复杂且个性化的Web应用。
69 0
|
3月前
|
API UED 开发者
如何在Uno Platform中轻松实现流畅动画效果——从基础到优化,全方位打造用户友好的动态交互体验!
【8月更文挑战第31天】在开发跨平台应用时,确保用户界面流畅且具吸引力至关重要。Uno Platform 作为多端统一的开发框架,不仅支持跨系统应用开发,还能通过优化实现流畅动画,增强用户体验。本文探讨了Uno Platform中实现流畅动画的多个方面,包括动画基础、性能优化、实践技巧及问题排查,帮助开发者掌握具体优化策略,提升应用质量与用户满意度。通过合理利用故事板、减少布局复杂性、使用硬件加速等技术,结合异步方法与预设缓存技巧,开发者能够创建美观且流畅的动画效果。
78 0
|
3月前
|
缓存 关系型数据库 数据库
Tornado 也太厉害了吧!高性能 Web 开发的神器,快来看看这逆天的强大引擎!
【8月更文挑战第31天】在互联网时代,Web应用的性能至关重要。Tornado作为高性能Python Web框架,凭借其异步非阻塞I/O模型,能够高效处理大量并发连接,降低资源消耗并提升响应速度。其简洁易用的特性及丰富的功能(如路由管理、模板引擎等),使开发者能快速构建强大的Web应用。通过合理运用异步编程、优化数据库操作、使用缓存以及优化模板渲染等最佳实践,可充分发挥Tornado的优势,打造高性能Web应用。
100 0
|
4月前
|
机器人 Shell 开发者
`roslibpy`是一个Python库,它允许非ROS(Robot Operating System)环境(如Web浏览器、移动应用等)与ROS环境进行交互。通过使用`roslibpy`,开发者可以编写Python代码来远程控制ROS节点,发布和订阅话题,以及调用服务。
`roslibpy`是一个Python库,它允许非ROS(Robot Operating System)环境(如Web浏览器、移动应用等)与ROS环境进行交互。通过使用`roslibpy`,开发者可以编写Python代码来远程控制ROS节点,发布和订阅话题,以及调用服务。
|
4月前
|
Web App开发 前端开发 JavaScript
认识WebKit浏览器引擎
WebKit是一款开源的浏览器引擎,用于渲染网页内容。它负责将HTML、CSS和JavaScript等网络资源转换为用户在屏幕上看到的图形界面。WebKit是一个跨平台的引擎,可以在多种操作系统上运行,如Windows、macOS、Linux等。
58 2
|
3月前
|
网络安全 数据安全/隐私保护 iOS开发
【Mac os】如何在服务器上启动Jupyter notebook并在本地浏览器Web端环境编辑程序
本文介绍了如何在服务器上启动Jupyter Notebook并通过SSH隧道在本地浏览器中访问和编辑程序的详细步骤,包括服务器端Jupyter的启动命令、本地终端的SSH隧道建立方法以及在浏览器中访问Jupyter Notebook的流程。
126 0
|
3月前
|
存储 移动开发 编解码
一文读懂Web Codecs API:浏览器背后的媒体魔术师
一文读懂Web Codecs API:浏览器背后的媒体魔术师
39 0