当前位置: 首页 > news >正文

QWebEngineView添加自定义网址协议UrlScheme

QWebEngineView可以和js交互需要使用QWebChannel,如果不使用的话,js可以请求自定义网址协议,相当于请求服务器,但是不用Qt专门做服务器,不占用系统端口。

如果结合系统自定义URL注册,可以达到访问自定义URL,启动我们的Qt程序,程序里再处理自定义URL网址

1.继承QWebEngineUrlSchemeHandler 创建协议处理类

class AMUrlSchemeHandler : public QWebEngineUrlSchemeHandler
{Q_OBJECTpublic:AMUrlSchemeHandler(QObject *parent);~AMUrlSchemeHandler();virtual void requestStarted(QWebEngineUrlRequestJob* pReqJob);
};

2. 在requestStarted编写响应内容

void AMUrlSchemeHandler::requestStarted(QWebEngineUrlRequestJob* pReqJob)
{QJsonObject jsonObj;jsonObj.insert("requestUrl", pReqJob->requestUrl().toString());jsonObj.insert("requestMethod", QString(pReqJob->requestMethod()));jsonObj.insert("initiator", pReqJob->initiator().toString());if (pReqJob->requestUrl().toString() == "amurl://www.baidu.com"){if (pReqJob->requestMethod() == "GET"){jsonObj.insert("result", "GET 0");}else if (pReqJob->requestMethod() == "POST"){jsonObj.insert("result", "POST 1");}else{pReqJob->fail(QWebEngineUrlRequestJob::RequestDenied);return;}}QBuffer* buffer = new QBuffer;connect(pReqJob, SIGNAL(destroyed()), buffer, SLOT(deleteLater()));buffer->open(QIODevice::WriteOnly);QString strJson = QJsonDocument(jsonObj).toJson(QJsonDocument::Indented);buffer->write(strJson.toUtf8());buffer->close();pReqJob->reply("application/json", buffer);
}

3.在QApplication初始化前注册自定义协议QWebEngineUrlScheme::registerScheme(scheme);

4. 再安装协议处理类installUrlSchemeHandler("amurl", handler);

int main(int argc, char *argv[])
{QWebEngineUrlScheme scheme("amurl");scheme.setSyntax(QWebEngineUrlScheme::Syntax::Path);scheme.setFlags(QWebEngineUrlScheme::SecureScheme);QWebEngineUrlScheme::registerScheme(scheme);QApplication a(argc, argv);AMUrlSchemeHandler* handler = new AMUrlSchemeHandler(&a);QWebEngineProfile::defaultProfile()->installUrlSchemeHandler("amurl", handler);StudyQWebEngineUrlScheme w;w.show();return a.exec();
}

5. 我们可以访问试试

StudyQWebEngineUrlScheme::StudyQWebEngineUrlScheme(QWidget *parent): QMainWindow(parent)
{ui.setupUi(this);QVBoxLayout* pLayoutMain = new QVBoxLayout(ui.centralWidget);ui.centralWidget->setLayout(pLayoutMain);pLayoutMain->setContentsMargins(0, 30, 0, 0);{m_pView = new QWebEngineView(ui.centralWidget);pLayoutMain->addWidget(m_pView);{QWebEnginePage* pWebEnginePage = new QWebEnginePage(m_pView);m_pView->setPage(pWebEnginePage);}QWebEngineView* view1 = new QWebEngineView(m_pView);pLayoutMain->addWidget(view1);m_pView->page()->setDevToolsPage(view1->page());}//Get请求m_pView->load(QUrl("amurl://www.Baidu.com"));connect(ui.btnPost, &QPushButton::clicked, this, &StudyQWebEngineUrlScheme::sltBtnPostClicked);connect(ui.btnOther, &QPushButton::clicked, this, &StudyQWebEngineUrlScheme::sltBtnOtherClicked);
}void StudyQWebEngineUrlScheme::sltBtnPostClicked()
{QWebEngineHttpRequest  httpReq;httpReq.setUrl(QUrl("Amurl://www.Baidu.com"));httpReq.setMethod(QWebEngineHttpRequest::Post);m_pView->load(httpReq);//POST请求好像无效,无法处理
}void StudyQWebEngineUrlScheme::sltBtnOtherClicked()
{QWebEngineHttpRequest  httpReq;httpReq.setUrl(QUrl("Amurl://www.Baidu.coM"));httpReq.setMethod(QWebEngineHttpRequest::Method(2));m_pView->load(httpReq);//Method>=2,请求都转为Get请求了
}

官方示例:WebEngine Widgets WebUI 范例| Qt WebEngine 5.15.1 -中文文档编制,帮助,手册,教程

本文示例代码:

所有代码的7z压缩后的Base64编码如下:

(注意复制出来是一行,再Base64 Decode,保存成7z文件,再解压即可)

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

相关文章:

QWebEngineView添加自定义网址协议UrlScheme

QWebEngineView可以和js交互需要使用QWebChannel,如果不使用的话,js可以请求自定义网址协议,相当于请求服务器,但是不用Qt专门做服务器,不占用系统端口。 如果结合系统自定义URL注册,可以达到访问自定义UR…...

react中使用腾讯地图

腾讯文档 申请好对应key 配置限额 https://lbs.qq.com/service/webService/webServiceGuide/webServiceQuota 代码 用到的服务端接口 1.逆地址解析 2.关键词输入提示 import React, { Component } from react; import styles from ./map.less import { Form, Row, Col, I…...

deepin23beta中SQLite3数据库安装与使用

SQLite 是一个嵌入式 SQL 数据库引擎,它实现了一个自包含、无服务器、零配置、事务性 SQL 数据库引擎。 SQLite 的代码属于公共领域,因此可以免费用于任何商业或私人目的。 SQLite 是世界上部署最广泛的数据库,其应用程序数量之多&#xff0c…...

前后端分离项目环境搭建

1. 使用到的技术和工具 springboot vue项目的搭建 工具 idea,mavennodejs 2. 后端框架搭建 利用maven创建springboot项目 3. 前端项目搭建 1. 安装相关工具 nodejs: 一个开源、跨平台的 JavaScript 运行时环境,可以理解成java当中需要…...

HTML静态网页成品作业(HTML+CSS)——家乡漳州介绍设计制作(1个页面)

🎉不定期分享源码,关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 🏷️本套采用HTMLCSS,未使用Javacsript代码,共有1个页面。 二、作品演示 三、代…...

世界第二对海信到底有多重要?

作者 | 辰纹 来源 | 洞见新研社 不久前,全球权威市场研究机构Omdia公布了2023年全球电视销量排名,数据显示TCL电视全球销量达到了2526万台,位居全球第二,中国第一。 可是,同样是根据Omdia的数据,海信的官…...

多站合一的音乐搜索下载助手PHP源码l亲测

源码获取方式 回复:031601 搭建教程: 将源码下载上传至宝塔面板,直接运行即可~ 说明: 该源码进行测试,测试成功源码无加密优化相关其他采集问题。...

webserver烂大街?还有必要做么?

目录 什么是 Web Server? 如何提供 HTTP 服务? HTTP协议 简介 工作原理 工作步骤 HTTP请求报文格式 HTTP响应报文格式 HTTP请求方法 HTTP状态码 ​总结 都说webserver是C选手人手必备的烂大街项目,那么webserver 还有必要做么&…...

3.Redis命令

Redis命令 Redis 根据命令所操作对象的不同, 可以分为三大类: 对 Redis 进行基础性操作的命令,对 Key 的操作命令,对 Value 的操作命令。 1.1 Redis 首先通过 redis-cli 命令进入到 Redis 命令行客户端,然后再运行下…...

xray问题排查,curl: (35) Encountered end of file(已解决)

经过了好几次排查,都没找到问题,先说问题的排查过程,多次确认了user信息,包括用户id和alterid,都没问题,头大的一逼 问题排查过程 确保本地的xray服务是正常的 [rootk8s-master01 xray]# systemctl stat…...

【数据库】Oracle内存结构与参数调优

Oracle内存结构与参数调优 Oracle 内存结构概览oracle参数配置概览重要参数(系统运行前配置):次要参数(可在系统运行后再优化调整): Oracle数据库服务器参数如何调整OLTP内存分配操作系统核心参数配置Disabling ASMM(禁…...

PS学习-抠图-蒙版-冰块酒杯等透明物体

选中图,ctrlA 全选 ctrlC复制 创建一个蒙版图层 选中蒙版Alt 点击进入 ctrlv 复制 ctrli 反转 原图层 ctrldelete填充为白色 添加一个背景,这个方法通用 首选创建一个 拖到最底部 给它填充颜色 这个可能是我图片的原因。视频是这样做的...

绝赞春招拯救计划 -- 操作系统,组成原理,计网

进程和线程 进程 一个在内存中运行的应用程序。每个进程都有自己独立的一块内存空间,一个进程可以有多个线程 线程 进程中的一个执行任务(控制单元),负责当前进程中程序的执行。一个进程至少有一个线程,一个进程可以…...

c语言:于龙加

于龙加 任务描述 于龙同学设计了一个特别的加法规则,加法被重新定义了,我们称为于龙加。 两个非负整数的于龙加的意义是将两个整数按前后顺序连接合并形成一个新整数。 于龙想编程解决于龙加问题,可是对下面的程序他没有思路! …...

AcWing 790:数的三次方根 ← 浮点数二分

【题目来源】https://www.acwing.com/problem/content/792/【题目描述】 给定一个浮点数 n,求它的三次方根。【输入格式】 共一行,包含一个浮点数 n。【输出格式】 共一行,包含一个浮点数,表示问题的解。 注意,结果保留…...

【LLM】LLama2模型(RMSNorm、SwiGLU、RoPE位置编码)

note 预训练语言模型除了自回归(Autoregressive)模型GPT,还有自编码模型(Autoencoding)BERT[1]、编-解码(Encoder-Decoder)模型BART[67],以及融合上述三种方法的自回归填空&#xf…...

【力扣白嫖日记】1934.确认率

前言 练习sql语句,所有题目来自于力扣(https://leetcode.cn/problemset/database/)的免费数据库练习题。 今日题目: 1934.确认率 表:Signups 列名类型user_idinttime_stampdatetime User_id是该表的主键。每一行都…...

TinTin Web3 动态精选:以太坊坎昆升级利好 Layer2,比特币减半进入倒计时

TinTin 快讯由 TinTinLand 开发者技术社区打造,旨在为开发者提供最新的 Web3 新闻、市场时讯和技术更新。TinTin 快讯将以周为单位, 汇集当周内的行业热点并以快讯的形式排列成文。掌握一手的技术资讯和市场动态,将有助于 TinTinLand 社区的开…...

PCL 高斯投影反算:高斯投影坐标转大地坐标(C++详细过程版)

目录 一、算法原理二、代码实现三、结果展示四、测试数据PCL 高斯投影反算:高斯投影坐标转大地坐标(C++详细过程版)由CSDN点云侠原创。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫。 一、算法原理...

解决:IDEA编译Java程序时报编译失败

1、问题展示: 2、解决方法:...

RestClient

什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端,它允许HTTP与Elasticsearch 集群通信,而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级&#xff…...

C++:std::is_convertible

C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...

Xshell远程连接Kali(默认 | 私钥)Note版

前言:xshell远程连接&#xff0c;私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...

三维GIS开发cesium智慧地铁教程(5)Cesium相机控制

一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点&#xff1a; 路径验证&#xff1a;确保相对路径.…...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》

在注意力分散、内容高度同质化的时代&#xff0c;情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现&#xff0c;消费者对内容的“有感”程度&#xff0c;正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中&#xff0…...

cf2117E

原题链接&#xff1a;https://codeforces.com/contest/2117/problem/E 题目背景&#xff1a; 给定两个数组a,b&#xff0c;可以执行多次以下操作&#xff1a;选择 i (1 < i < n - 1)&#xff0c;并设置 或&#xff0c;也可以在执行上述操作前执行一次删除任意 和 。求…...

Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理

引言 Bitmap&#xff08;位图&#xff09;是Android应用内存占用的“头号杀手”。一张1080P&#xff08;1920x1080&#xff09;的图片以ARGB_8888格式加载时&#xff0c;内存占用高达8MB&#xff08;192010804字节&#xff09;。据统计&#xff0c;超过60%的应用OOM崩溃与Bitm…...

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中&#xff0c;新增了一个本地验证码接口 /code&#xff0c;使用函数式路由&#xff08;RouterFunction&#xff09;和 Hutool 的 Circle…...

Angular微前端架构:Module Federation + ngx-build-plus (Webpack)

以下是一个完整的 Angular 微前端示例&#xff0c;其中使用的是 Module Federation 和 npx-build-plus 实现了主应用&#xff08;Shell&#xff09;与子应用&#xff08;Remote&#xff09;的集成。 &#x1f6e0;️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...

【生成模型】视频生成论文调研

工作清单 上游应用方向&#xff1a;控制、速度、时长、高动态、多主体驱动 类型工作基础模型WAN / WAN-VACE / HunyuanVideo控制条件轨迹控制ATI~镜头控制ReCamMaster~多主体驱动Phantom~音频驱动Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation速…...