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 是世界上部署最广泛的数据库,其应用程序数量之多,…...
前后端分离项目环境搭建
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],以及融合上述三种方法的自回归填空…...
【力扣白嫖日记】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、解决方法:...
华为云AI开发平台ModelArts
华为云ModelArts:重塑AI开发流程的“智能引擎”与“创新加速器”! 在人工智能浪潮席卷全球的2025年,企业拥抱AI的意愿空前高涨,但技术门槛高、流程复杂、资源投入巨大的现实,却让许多创新构想止步于实验室。数据科学家…...
AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
【kafka】Golang实现分布式Masscan任务调度系统
要求: 输出两个程序,一个命令行程序(命令行参数用flag)和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽,然后将消息推送到kafka里面。 服务端程序: 从kafka消费者接收…...
Oracle查询表空间大小
1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...
安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件
在选煤厂、化工厂、钢铁厂等过程生产型企业,其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进,需提前预防假检、错检、漏检,推动智慧生产运维系统数据的流动和现场赋能应用。同时,…...
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南 在数字化营销时代,邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天,我们将深入解析邮件打开率、网站可用性、页面参与时…...
重启Eureka集群中的节点,对已经注册的服务有什么影响
先看答案,如果正确地操作,重启Eureka集群中的节点,对已经注册的服务影响非常小,甚至可以做到无感知。 但如果操作不当,可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...
中医有效性探讨
文章目录 西医是如何发展到以生物化学为药理基础的现代医学?传统医学奠基期(远古 - 17 世纪)近代医学转型期(17 世纪 - 19 世纪末)现代医学成熟期(20世纪至今) 中医的源远流长和一脉相承远古至…...
Web中间件--tomcat学习
Web中间件–tomcat Java虚拟机详解 什么是JAVA虚拟机 Java虚拟机是一个抽象的计算机,它可以执行Java字节码。Java虚拟机是Java平台的一部分,Java平台由Java语言、Java API和Java虚拟机组成。Java虚拟机的主要作用是将Java字节码转换为机器代码&#x…...
Java 与 MySQL 性能优化:MySQL 慢 SQL 诊断与分析方法详解
文章目录 一、开启慢查询日志,定位耗时SQL1.1 查看慢查询日志是否开启1.2 临时开启慢查询日志1.3 永久开启慢查询日志1.4 分析慢查询日志 二、使用EXPLAIN分析SQL执行计划2.1 EXPLAIN的基本使用2.2 EXPLAIN分析案例2.3 根据EXPLAIN结果优化SQL 三、使用SHOW PROFILE…...
