当前位置: 首页 > 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、解决方法:...

微信小程序之bind和catch

这两个呢,都是绑定事件用的,具体使用有些小区别。 官方文档: 事件冒泡处理不同 bind:绑定的事件会向上冒泡,即触发当前组件的事件后,还会继续触发父组件的相同事件。例如,有一个子视图绑定了b…...

如何在看板中体现优先级变化

在看板中有效体现优先级变化的关键措施包括:采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中,设置任务排序规则尤其重要,因为它让看板视觉上直观地体…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...

Java入门学习详细版(一)

大家好,Java 学习是一个系统学习的过程,核心原则就是“理论 实践 坚持”,并且需循序渐进,不可过于着急,本篇文章推出的这份详细入门学习资料将带大家从零基础开始,逐步掌握 Java 的核心概念和编程技能。 …...

爬虫基础学习day2

# 爬虫设计领域 工商:企查查、天眼查短视频:抖音、快手、西瓜 ---> 飞瓜电商:京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空:抓取所有航空公司价格 ---> 去哪儿自媒体:采集自媒体数据进…...

使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台

🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...

力扣-35.搜索插入位置

题目描述 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...

三分算法与DeepSeek辅助证明是单峰函数

前置 单峰函数有唯一的最大值,最大值左侧的数值严格单调递增,最大值右侧的数值严格单调递减。 单谷函数有唯一的最小值,最小值左侧的数值严格单调递减,最小值右侧的数值严格单调递增。 三分的本质 三分和二分一样都是通过不断缩…...

代码规范和架构【立芯理论一】(2025.06.08)

1、代码规范的目标 代码简洁精炼、美观,可持续性好高效率高复用,可移植性好高内聚,低耦合没有冗余规范性,代码有规可循,可以看出自己当时的思考过程特殊排版,特殊语法,特殊指令,必须…...

Leetcode33( 搜索旋转排序数组)

题目表述 整数数组 nums 按升序排列&#xff0c;数组中的值 互不相同 。 在传递给函数之前&#xff0c;nums 在预先未知的某个下标 k&#xff08;0 < k < nums.length&#xff09;上进行了 旋转&#xff0c;使数组变为 [nums[k], nums[k1], …, nums[n-1], nums[0], nu…...