Qt 集成Web 的内容

2023-11-19

Qt 集成Web 的内容

为了创建基于Qt的Web应用程序,Qt提供了支持各种标准Web技术(如HTML,CSS和JavaScript)的接口。 这些接口使应用程序能够嵌入来自万维网的内容。

也可以将Qt C ++和QML代码与HTML和JavaScript结合起来创建Web应用程序。通过Qt WebChannel,远程客户端可以访问Qt的相关API。

Qt 中的WebEngine

Qt为面向桌面和嵌入式平台的应用程序提供基于Chromium的Qt WebEngine模块。例如,Linux平台的Web浏览器应用程序。

Qt还提供Qt WebView模块,该模块使用平台的本机Web引擎。 例如,适用于Android和iOS的Rss Freed Reader。

这些页面包含有关使用Qt WebEngine 的方法:

  • Qt WebEngine 概述
  • Qt WebView
  • 从Qt WebKit移植到Qt WebEngine

Qt和HTML-JavaScript混合应用程序

Qt WebChannel模块使HTML或JavaScript客户端能够访问Qt API,例如QObject。它提供C ++或QML API,允许Qt应用程序与JavaScript和HTML前端进行通信。

API 信息如下:

  • JavaScript API
  • C++ API
  • QML API
  • 示例

Qt WebEngine 概述

Qt WebEngine模块提供了一个Web浏览器引擎,可以轻松地将万维网中的内容嵌入到Qt应用程序中,即使本地平台没有提供Web engine。

Qt WebEngine提供了用于呈现HTML,XHTML和SVG文档的C ++类和QML类型,使用层叠样式表(CSS)设置样式并使用JavaScript编写脚本。用户可以通过在HTML元素上使用contenteditable属性来编辑HTML文档。

Qt WebEngine 架构

img

Qt WebEngine中的功能分为以下几个模块:

  • Qt WebEngine Widgets模块,用于创建基于widget的Web应用程序。
  • Qt WebEngine模块,用于创建基于Qt Quick的Web应用程序。
  • Qt WebEngine Core,用于与Chromium交互。

Page rendering和JavaScript执行从GUI过程分离到Qt WebEngine过程。 如果应用程序中有使用Qt库,则在发布程序的时候,也必须将Qt库随应用程序一起打包。

Qt WebEngine Widgets 模块

img

web engine view 是Qt WebEngine模块的主要widget组件。它可以在各种应用程序中用于加载Web内容。在视图中,web engine page 包含一个主框架,负责Web内容,导航链接的历史记录和操作。View和Page非常相似,因为它们提供了一组常用功能。

所有页面都属于包含共享设置,脚本和cookie的web engine profile。profile可用于将页面彼此隔离。典型的用例是private browsing 模式的专用配置文件,其不会永久保存任何信息。

注意: Qt WebEngine Widgets模块使用Qt Quick scene graph将网页元素组合成一个视图。 这意味着UI 需要OpenGL ES 2.0或OpenGL 2.0才能进行渲染。

Qt WebEngine 模块

img

Qt WebEngine QML实现包含与Qt WebEngine Widgets实现相同的元素,但没有可单独访问的Web引擎页面。支持的页面功能已集成到Web引擎视图中。

Qt WebEngine Core 模块

Qt WebEngine核心基于Chromium Project。Chromium提供自己的网络和绘画引擎,并与其依赖模块紧密结合。

注意: Qt WebEngine基于Chromium,但不包含或使用任何可能属于Google构建和提供的Chrome浏览器的服务或加载项。 您可以在此概述中找到有关Chromium和Chrome之间的差异,该概述是 Chromium Project 源代码树中文档的一部分。

此版本的Qt WebEngine基于Chromium版本56.0.2924.122,其中包含更新版本的其他安全修复程序。

Qt WebEngine Process

Qt WebEngine Process是一个单独的可执行文件,用于呈现网页和执行JavaScript。 这可以缓解安全问题并隔离由特定内容引起的崩溃。

将Web内容嵌入到基于Widget的应用程序中

使用QWebEngineView 类以最简单的方式显示网页。 因为它是一个小部件,您可以将QWebEngineView 嵌入到表单中,并使用其便捷功能下载和显示网站。

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

QWebEngineView 的一个实例包含一个QWebEnginePageQWebEnginePage可以包含一个QWebEngineHistory 来提供访问页面的导航历史记录和若干操作网页的QAction 对象。 此外,QWebEnginePage 能够在页面主框架的上下文中运行JavaScript代码,并为特定事件(如显示自定义身份验证对话框)启用自定义的处理程序。

每个QWebEnginePage 都属于一个QWebEngineProfile ,它可以包含一个用于指定页面设置的QWebEngineSettings,一个用于在页面上运行脚本的QWebEngineScriptCollection ,以及一个用于访问Chromium的HTTP cookie的QWebEngineCookieStoreQWebEnginePage 也可以直接指向脚本集合。

对于基于widget的应用程序,Web引擎会自动初始化,除非它被放置在插件中。 在这种情况下,必须使用QtWebEngine::initialize ,在应用程序主源文件中初始化它,如以下代码片段所示:

int main(int argc, char **argv)
{
    QApplication app(argc, argv);

    QtWebEngine::initialize();

    QMainWindow window;
    window.show();

    return app.exec();
}

将Web内容嵌入到Qt Quick应用程序中

WebEngineView QML类型允许Qt Quick应用程序呈现动态Web内容。WebEngineView 类型可以与其他QML类型共享屏幕,或者独占整个Qt Quick应用程序显示页面。

要确保可以在GUI和render processes之间共享OpenGL上下文,必须使用应用程序主源文件中的QtWebEngine::initialize 初始化Web引擎,如以下代码段所示:

int main(int argc, char *argv[])
{
    QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
    QGuiApplication app(argc, argv);

    QtWebEngine::initialize();

    QQmlApplicationEngine engine;
    engine.load(QUrl(QStringLiteral("qrc:/main.qml")));

    return app.exec();
}

应用程序可以使用URL或HTML字符串将页面加载到 WebEngineView中,并在会话历史记录中导航。默认情况下,指向不同页面的链接在同一 WebEngineView对象中加载,但网站可能会要求将它们作为新选项卡,窗口或对话框打开。

以下示例QML应用程序使用 url 属性加载网页:

import QtQuick 2.0
import QtQuick.Window 2.0
import QtWebEngine 1.0

Window {
    width: 1024
    height: 750
    visible: true
    WebEngineView {
        anchors.fill: parent
        url: "http://www.qt.io"
    }
}

注入脚本

Qt WebEngine不允许直接访问页面的文档对象模型(DOM)。 但是,可以通过注入脚本来检查和调整DOM。

在文档准备好时,通常在页面完全加载时创建页面的DOM。 因此,一旦创建文档就执行脚本不适合DOM操作,其必须等到DOM准备好之后。

此外,注入的脚本与页面上执行的其他脚本共享相同的世界,这可能会导致冲突。为避免这种情况,QWebEngineScript 类和WebEngineScript QML类型提供了Chromium API for Content Script Extensions的实现。它们指定要运行的脚本,注入点以及运行脚本的世界。这使得访问DOM能够在一个世界中操纵它。

从Qt 5.8开始,Qt WebEngine支持使用 Greasemonkey-like attributes 扩充脚本:

  • @exclude <regexp>
  • @include <regexp>
  • @match <regexp>
  • @name <free text>
  • @run-at [document-start|document-end|document-idle]

这些属性确定是否以及何时运行用户脚本。 它们必须放在脚本的开头,在== UserScript == 注释中:

// ==UserScript==
// @include http://*.qt.io/*
// @exclude http://wiki.qt.io/*
// ==/UserScript==

window.alert("Page is from qt.io, but not wiki.qt.io");
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Qt 集成Web 的内容 的相关文章

  • 如何管理返回到 QML 的动态分配的 QObject 的生命周期?

    我有这个代码 QVariant componentFromCode QString code QQmlComponent component new QQmlComponent engine engine gt setObjectOwner
  • 一个阻塞但非模态的 QDialog?

    我有一堆图像 我想对其执行一些操作 处理完每个图像后 我的程序应该弹出一个对话框 提示用户是否要继续处理下一个图像或中止 在此之前 他们应该有机会对图像或参数进行一些手动更改 无论如何 他们必须能够访问应用程序的窗口 而调用对话框的方法的执
  • 在 QtCreator 中查看数组内容

    调试时是否可以在 Qt Creator 中查看数组的内容 似乎检测到我的数组是一个数组而不是一个指针 此外 我可以点击一个箭头 就像展开一样 但之后什么也没有显示 当我试穿的时候std vector Qt Creator 设法按预期显示内容
  • 如何设置 Xcode 来代替 Qt Creator 工作?

    我不使用 Qt Creator 的 UI 设计功能 对于一个新项目 我想体验一下使用 Xcode 的工作 这将是一个常规的 Qt 项目 使用 C 和 Qt 库开发 就像在 Qt Creator 中一样 我没有使用 OS X 尤其是 Xcod
  • QGroupBox边框

    经过一段时间的搜索后 我发现在组框上设置可见边框的方法是使用 StyleSheet 属性 我补充道 border 2px solid gray 但有几个问题 1 组框内的所有内容也继承此设置 2 边框在标题附近有一个小洞 碎片缺失 Here
  • Qt、PushButton、id 属性?有什么方法可以知道点击了哪个按钮

    void MainWindow addRadioToUI int button cunter 4 while database isEmpty button cunter QPushButton one new QPushButton Pl
  • Qt + win32 + mingw 上的原生 Windows API 链接问题

    我正在尝试使用 mingw 工具集将本机 Windows API 与 Qt 结合使用 部分功能存在链接问题 会发生什么 这是 mingw 名称修改的错误吗 ifdef Q WS WIN HWND hwnd QWidget winId HDC
  • 获取小部件的背景颜色 - 真的

    我无法获取小部件的实际背景颜色 在我的特殊情况下 我在使用 QTabWidget 中的小部件时遇到问题 这是在Windows7上 因此 经典的小部件有一些灰色背景 而选项卡内的小部件通常用白色背景绘制 I tried def bgcolor
  • 对齐坐标系

    Let s say I have 2 coordinate systems as it is shown in image attached 如何对齐这个坐标系 我知道我需要将第二个坐标系围绕 X 平移 180 度 然后将其平移到第一个坐标
  • Qt 支持在 QIcon 中为 SVG 着色

    看来 Qt 不支持 SVG 中路径标签上的描边 填充选项
  • 在 QtCreator 中将 OpenCV 2.3 与 Qt 结合使用

    随着 OpenCV 2 3 版本终于发布 我想在我的系统上编译并安装这个最新版本 由于我经常使用 Qt 和 QtCreator 我当然希望能够在我的 Qt 项目中使用它 我已经尝试了几种方法几个小时 但总是出现错误 第一次尝试 使用WITH
  • QTableView 中的虚拟列?

    我开始学习 Qt4 模型 视图编程 我有初学者问题 我有一个简单的应用程序 其中显示 sqlite 表QTableView class Model QtSql QSqlTableModel def init self parent None
  • MAC 上的 QT/C++ - 未设置应用程序图标

    我正在努力解决的奇怪问题 在与我的 pro QT 项目文件相同的文件夹中 我有一个 Resources myIcon png 我试图将其设置为我构建的应用程序的图标 在 OSX 上运行 我阅读了文档 它建议在 pro 文件中添加 ICON
  • QSpinBox 输入 NaN 作为有效值

    我正在尝试扩展 QSpinBox 以能够输入 NaN 或 nan 作为有效值 根据文档 我应该使用 textFromValue valueFromText 和 validate 函数来完成此操作 但我无法让它工作 因为它仍然不允许我输入除数
  • 使用 cmake 将两种解决方案合二为一

    我有两个单独的 Visual Studio 2013 解决方案 我想将它们迁移到一个解决方案中 因为第一个解决方案 使用 Qt 充当第二个解决方案的 GUI 最后 我希望有一个结构如下的单一解决方案 Solution All Build P
  • 如何在按下托盘图标菜单操作时执行功能?

    int main int argc char argv QApplication oApp argc argv QAction action1 QMenu menu QSystemTrayIcon TrayIcon QIcon favico
  • Qt中如何获取鼠标在屏幕上的位置?

    我想获取屏幕上的鼠标坐标 我怎样才能在 Qt 中做到这一点 在 Windows 上 使用 C 我正在做类似答案中建议的事情对于这个问题 https stackoverflow com q 11737665 1420197 正如文档所述 QC
  • QTcpSocket 有时不发送数据

    我有两个 QT 应用程序 一个应用程序可以被认为保存了大数据 它每秒向第二个应用程序发送大约 10 KB 的数据块 之前我尝试使用QUdpSocket来传输数据 但由于MTU限制在2 5K左右 并且需要自己分割和重新组合数据 所以我改用QT
  • 禁用 QML Slider 的鼠标滚轮

    我希望能够滚动Flickable使用鼠标滚轮 或触摸板上的两根手指 不改变Sliders它可能包含 示例代码及结果应用 import QtQuick 2 7 import QtQuick Window 2 2 import QtQuick
  • 如何创建用于 QML 的通用对象模型?

    我想知道是否有任何宏或方法如何将 Qt 模型注册为 QObject 的属性 例如 我有AnimalModel http doc qt io qt 5 qtquick modelviewsdata cppmodels html qabstra

随机推荐

  • 怎么用python画sin函数图像_如何使用python的matplotlib模块画正弦函数图像

    python是一个很有趣的语言 可以在命令行窗口运行 python中有很多功能强大的模块 这篇经验告诉你 如何利用python的matplotlib模块 绘制正弦函数y sin x 的图像 工具 原料 windows系统电脑一台 pytho
  • Android 实战项目分享(一)用Android Studio绘制贝塞尔曲线的艺术之旅

    一 项目概述 欢迎来到创意之源 我们精心打造的绘图应用程序将带你进入一个充满艺术和技术的奇妙世界 通过使用Android Studio 我们实现了绘制贝塞尔曲线的功能 让你能够轻松创作出令人惊叹的艺术作品 不论你是热爱绘画的大学生还是渴望学
  • SyntaxError: can't assign to operator

    变量名不能有
  • 计算机图像视频处理

    计算机图像视频处理 计算机视觉概论 计算机视觉概念 计算机图像处理 也即数字图像处理 Digital Image Processing 是指将图像信号转换成数字信号并利用计算机对其进行处理的过程 是通过计算机对图像进行去除噪声 增强 复原
  • CVPR 2018

    感谢阅读腾讯 AI Lab 微信号第 32 篇文章 CVPR 2018上涌现出非常多的优秀论文 腾讯 AI Lab 对其中精华文章归类与摘要 根据受关注程度 对生成对抗网络 视频分析与理解和三维视觉三大类论文进行综述 第一部分 生成对抗网络
  • 强网杯 2019]随便注 【SQL注入】四种解法

    题目简介 题目名称 强网杯 2019 随便注 1 题目平台 BUUCTF 题目类型 Web 考察知识点 SQL注入 解题步骤 方法一 首先启动并访问靶机 有一个输入框 随便输入1 or 1 1 测试一下是否存在sql注入 提交后提示erro
  • 前端八股文-Nodejs介绍,组成,架构和依赖,特点,运行环境安装,包和NPM,NPM包的版本管理,V8 引擎 和 libuv 库,BFF 中间层,服务端渲染,

    01 Node js介绍 前言 Node 的重要性已经不言而喻 很多互联网公司都已经有大量的高性能系统运行在 Node 之上 Node 凭借其单线程 异步等举措实现了极高的性能基准 此外 目前最为流行的 Web 开发模式是前后端分离的形式
  • 一文搞定Mysql+Navicat16长期免费直连数据库安装教程

    一 Mysql安装包的下载 这里下载的是mysql8版本 第一个安装包比较小 第二个安装包比较大 因为包含调试工具 我这里下载的是第一个 二 解压并配置安装目录 这里浏览器默认的下载路径是TempEdgeDownload 把解压后的文件夹移
  • Bison解析sql

    Bison文件组成 主要分为3部分 1 序言 Prologue 声明全局标识符 定义数据类型 变量和宏 包含头文件 等 声明 declarations 声明终结符 非终结符 运算符的优先级 符号语义值的各种类型 2 语法 Grammar r
  • 3500+人工智能公司“大阅兵”,地表最强AI人才都去了哪里

    图片来源 由无界AI生成 作者 Lightspeed 编译 椎名 编辑 Zuri 人人都想拥有属于自己的生成式AI工具 但是全球只有极少人 能够真正构建出大型语言模型 新的AI应用基础设施和支持技术 这不但需要一套新的 特殊的技术能力 更需
  • 非线性拟合lsqcurvefit、nlinfit

    问题 有些时候我们需要拟合一些非线性的表达式 比如 我们知道一个表达式的式子是y A sin x exp x B log x 现在我们手里面有x与y对应的一大把数据 我们如何根据x y的值找出最佳的A B值 则我们现在借助Matlab的函数
  • Java学习

    Java之AJAX概念和实现方式 开发工具与关键技术 MyEclipse 10 java 作者 刘东标 撰写时间 2019 06 12 1 概念 Asynchronous JavaScript And XML 异步的JavaScript和X
  • 睿智的seq2seq模型2——利用seq2seq模型实现英文到法文的翻译

    睿智的seq2seq模型2 利用seq2seq模型实现英文到法文的翻译 学习前言 seq2seq简要介绍 英文翻译到法文的思路 1 对英文进行特征提取 2 将提取到的特征传入到decoder 3 将 t 作为起始符预测第一个字母 4 逐个字
  • 计算资源合并模式——云计算架构常用设计模式

    背景 云计算的解决方案中 最初设计可能有意遵循关注点分离的设计原则 把操作分解为独立的计算单元以便可以单独托管和部署 然而 虽然这种策略可以帮助简化解决方案的逻辑实现 但是在同一个应用程序中要部署大量的计算单元 这会增加运行时的托管成本 并
  • 性能测试大致分为以下六种

    性能测试大致分为以下六种 第一种是Benchmark 标杆测试 又叫基准测试 主要是测试一些基础数据 给进一步建立性能模型提供依据 一般测试人员按照1并发用户来执行脚本 校验脚本正确与否 为之后的压力测试和负载测试做准备 第二种是Load
  • 传奇修改数据库后服务器异常,DBserver提示物品数据库加载错误的解决方法

    DBserver exe程序是传奇服务端 什么是传奇服务端 中负责人物数据库处理的重要程序 也是我们运行服务端时第一个启动的程序 但由于现在的数据库名不统一还有服务端路径的不同 经常在运行时提示 Exception 物品数据库加载错误 在我
  • centos7 RTNETLINK answers: File exists 解决办法

    首先说一下本人遇到的问题 我是通过克隆虚拟机安装的服务器 已将 etc sysconfig network scripts ifcfg eno16777736 的UUID这一行删除 因为每张网卡的mac地址是不一样的 所以UUID也是不一样
  • 全卷积神经网络( FCN ):语义分割深度模型先驱

    语义分割 简单地说 分割就是抠图 语义分割 是像素级别地给物体分类 现在ps已经集成了很多自动分割的功能 摄像头采集到车前景象 通过模型分析 我们可以自动筛选出地面 交通线 人行道 行人 建筑 树 以及其他基础设施 在上图 我们可以看到地面
  • MyBatis 的基本使用、增删改查(一)

    1 ORM Mybatis ORM 对象关系映射 这个通俗点讲其实就是数据库的表和实体类相互映射的关系 这个了解一下就行 不重要 Mybatis 基于java的持久层框架 2 Mybatis 的入门使用 这边没有集成spring sprin
  • Qt 集成Web 的内容

    文章目录 Qt 集成Web 的内容 Qt 中的WebEngine Qt和HTML JavaScript混合应用程序 Qt WebEngine 概述 Qt WebEngine 架构 Qt WebEngine Widgets 模块 Qt Web