当前位置: 首页 > 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文件,再解压即可)

N3q8ryccAAR4F49KLwwAAAAAAAAjAAAAAAAAAIm4NCHgLc0LHV0AEZpJxkcPE6IAdxz7hl38RS8dsuo5N/0pYz/q4AFep9LbGR3MpMAWyAbC6OXq++IwE1Eiyt0HM7fzDof5oc6YAeKxiOoy0OTiutYLrFlEZ5u5M2TALaZiq/L2t9s2cfFXQZYjxTeptTRYEtewulCeA7llXKEzCrA0xhcHcMB9Cplsr4waRaHm6WQbbBE0eI80HDyN/maHNk5OEliApKdiRm24ZYNcAregciAg2Z0bxczkpSXMaR4b2/VIARTfkb8S2LoGlZF9r7uolqet0C5tJb+9h0c/2/uCTBdYhfi84DSZlmDq5y3IJLxmw2oRDaJCsmSzTqwPiLgoit+VAqHTgf/7T8DNHAucixk0E9dMJMeTFljwRy9tDmxl3nU+o0FdHSOtzMfSKx2jLH3vgDLu5fLqOfGDVz4LP8KBvrgtQWuYGq6bdb6X0POtMzEeqOR+25tZ9eCk7k6eBzCLS2tozr86aml/3HtzXOasYKoZZXr7SkjPCJYzNTMdDoV3GEuuJ85hto3hcUeYyO90AWUjEWh10tpB+8cKgc24F5d2SRw21n3XMEb5ciVk63GbOcZSXZ/gGBh3fSR2R0YyPoOkLTG8Xit4Y6ZcxaNF5ohq2cmu1pQQGfnBsoS+LXhc/79RzNbWcUvb6UkcYXNRaG+Dt73RX5M07n8Up3bexjLkEW0mOkHXvpV3nI6R47XqVNgAo6Vmr7QMRR06X70hPASc0/Q//Ue6ZZVkK13Pekm2/sRbBfcZyj3VBezCFgnHt8U6fuFtbGSOYWLJczYgt1RereUkVQRZsKxGN19w6QVgjcXzNKtC4YlUrN0JDVFC0tM7szJUGWOnUvoIj/H7aRQi1ffAVROI+u4wT/kaJ+rnW2TmfMaWkhZWElX20bTz8W36El48PMJOJh3sduzlqvUEjwY+bRLRfIkKzDvLx9YaHoA91emiXz7OlxbQ+e1MzmJwYecQOG75GMb2mFCm93IdWULJt1Q13LpTFwfy8DUiSRbxhX9X+v48iJV+qDsp0uOP2yI17ghgPdDwA/x03EULvg/njEFhQaDmY1/7nEP+KTDuYfOwXCP1Q+lXYilu8djBt1Cle1ITxCRfdpQZaCVJ22I2G6e0goL0DlEi5IrSMlyTFjBz4uWDUixoaTG8gCDVLkPBBrS0KTcFOJLyl4cmFhhcmZdZ0oaup0/RgB3jhK9vPgNEp6AZeCph2slGuCxL9k7uhK/x5GpC63NBOpzOZLXf8eSmabdkEukAe3Q6a1QEyy0Gqa2aztl0JtW7MRnR1EvaMm6enGSfPz0DiM9+BTfuO/Xmt3WEsh0njcyqQ5RE5Z9gp0L93XAb0OrjKKam8GqiqucOUdB32ooKVGZJA83rEyLT6DTYtBCs4R5bsbTlbQ1jJVgrt0i++GzqeBCamgFEXthNc3/LZcDi6+vR9rXT3U142ih4uq3KQXdkjjxK68IIoWpIjHppelFyyUclMp7LExY2xdsz+YDwtAgm76LRKZYceXv8qESvVAHVTQji8tyE5mzBXn52trlPNhB58h2GEuYntiXI+P42W7uGwnKlvx7uG1dxpbyULihcObI3EOTSECbsRB7hwqnimbzPzefyK4+281AOKaEz/jDoSZt6mISjrLHl2uAl7bP4FDn80LGZfh05o+7P4waLe4HsRX85s9DCJpRFM1jp1spShvBnewUt7YbCqPtFoPbacxmw7mzdJuf+HcvG1Bh5kgezRzPlh+B3k9ycAxRuLlzMcTtkbgw8IAe9TiLRMQ6VLbhM0bgBtI4lWDf8/Fub7XniGSy6PTXtVMl6Bld7nCpZNvdKaFmvyn842gL4yPcSPiVXbaNCDpb841rxMhha3wnWRq9u1aUlMdC+dYdW6WkvOJu+t1t5lVyFctlLDUnwHIoRC9cGX80+WTG9vHd4HvJLKkDuBQdbjRsJU7ZiQN8zMHIf7FVeKBqJkPZVQzV22dc7n6q++FCTBIAj7ZSjbBuHh4hobr8a8xX5Smngv9ajoNf/K1rwtZ4OA911aa8cFW5TNFA1WwYDpxrPdaJOMFFbobHcQP0A8+p3hnqbSMnwWqhToD+DZzVvd/s5TDVw9ZnYCnRW1QJJC+xgtOo8tsSNVZkSZs+EzYdV5guUIoHRaXSsvyzEtTNJSdEX6bOmLAFtvMxcdmAIwengg/wevbQxZcJESadQZC2wlkh1Bzn/PcuIkl3htOxrRHZSE/Ud/HZxOYNfYfwBLuyO+F6kUHDEIFB+1elOZPbXWyYUTQbBSetcQJbtW3ygKTrhNHzNrmdY0ZaUfX1KumrAoYMU+Rnz0os26XS/+iy4O5Q5Bdx11PTilBJfYth014/vvx7qnXVhlCneKwkvyuVsVHJ9VsQ0LgsUGhDAIMpjVIBx4RcCK4usQje2YiTFCpjL00ChO17U0JFBWk/FrVTnBU579Y3FSXss15H5oAM2P/fxPWwTvh005zo01mqLT61pnuedIpl6fF6egu9IuEn5jFVxdo/dUG5BXHAkmJ10a5btKEL/nxo5WWATF/Q7/IMZAUebDC+3HzTwOm0kQE+HtUrPt8RDiCkSPf628JpknnngX2FLH/ZatL+uzN6GJ3yMhVqmofP+G1jkf6BlyBncvTYM5gJ5v2NMYgY8eqR67MPb7r4ucIre/M6FfS0kpuAuspAQMO7KwANoHltdCGiDg3ds7EHI+SR4npJ+zbH1mhNYfIkFnxvAZgOSioei4SFYKwVTwaBgXKml0EY7/RQw6JmIIOyA+/L1W3YHgbYFKcCqELnXFHioLMlTkTdrZcLwwuqeuuMa+vcwvt9zTmfmz2j51mVpwKCWkXSdHCR7Aiq3ktTlu9fdTPBENrUFNyBu8GN7e/q3klA3ZX4yUeTqnbpP9un2gsZV34HwzSKl0RV2nxZppx9GPNPqNDd0wFo2+dAwJ8F7ADO2tESiBnekq7LJXVCpFMTlxEo8R2tAxnoNxI4S9vKHNe5OAyy/YkQQP+tE0nyppJGiylDZ8CNhMfDNksyD6edMx9eaZxWLb6dceb643t2/jDFEHcgARc6b/p9pIIfx6Bu0/kfFCIAfTk28GjXwBEX/1VY+TIb+/vTQNczbZ4ueir8TIFPv5kBcZOozkoKOxEDWYgDnsD2U0i7Z3t1GdzxiZx3rxmQeGI+aeb0QO73EYq4UZJHtIhGkYTbfd2ZXgpvDgtiqNpBlBsEVG9dXcIGlE1iddmVUG8BRx++sYeWpOQ0y9Mmv/5d7PShRfbO8/2v2PPMPykwjiVXm0WcseG3N9Ep4EIYmp4OQ2x5mtgjTXcBslxWAzAXmqWsgEC7QwIFhZRXyRa5U1OtDdYwx1jbvySnq6AN7DcJFpB4RUeIXZcg3Ccm2lyzqYAISxl0FardZ7+m0VZHvxXuLaGIRmz/FF65FnXhDKmvHyqPCcW5vgq/CVSKtHSdfHiStbt7hiJy5WT7+pilDSHlH5wQAkF2n9EbZn8/D7N1Fp7731mSo+F8hkxfoCvK+DXTty8mBdeGaV7vn5BxkNbMsIqXIAwZONAk5S3aeR1zd6vD9rVNbbyMDQsOvROL8CpA9R2aFRVIiKfdUOArShOhRL9/aO5YaSpYFpRLzM1c6qhjqQN0dl1IZ4FuZ7pftptge2BsAx0q9HAZ2h+tZ/FFd33hocOT32hxFoUrwzaAbbiY4rPvRhAEgngu/syCJ70fTeS8GkuZ6eE5CwjE9K42fX2qj8W+KBlVNCm7nwa/iv0l81qTswHzMpRgKBFZCCGztasl33G8mjsqvnSRdD8cCy0LfYyEydYovxv5mXlwVnQAAAIEzB64P1aaotlck0/6zcCII0wW7LyNjZz5ND7Hh/dFsTY8C/kY0H9xvx1hylYdMIPb+MzOdNRw+Oo88sp1lRKLwC75h8/h49xScfa2E2wLG0QQzdUQJGyVF6dfffZYnKyg7wGkPH5yw81P9gc/M+R1+YxW1GUT2PPFkQh3IiukiTRALZ0r3R/qA1RO1dSXpanzV5yyGPp/Qmpwe5sgNFkoaXUTn3rzIrhADD97hTBQgRmF7vFnGFl1FQwve2WzqzZU1UMyF7Wmm/39orRNvmBF5O4ZWGKr6CoRZPZqCwUtlTcfXnn/smlZ3/gBizvtwozFw+uRLOW49wZSZ0YNqUWaUXlLysObNgBcGiyUBCYEKAAcLAQABIwMBAQVdABAAAAyCXgoB1LGF6gAA

相关文章:

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、解决方法:...

vue+vite根据版本号清空用户浏览器缓存

项目生产环境发布新版本之后,用户可能会因为一些本地缓存的数据不一样而导致页面报错。这时候可以根据版本号去清空用户缓存。 1、在package.json文件中有一个管理版本号属性:version,在每次打包部署之前修改当前版本号。 2、在main.js文件中…...

AXI CANFD MicroBlaze 测试笔记

文章目录 前言测试用的硬件连接Vivado 配置Vitis MicroBlaze CANFD 代码测试代码测试截图Github Link 前言 官网: CAN with Flexible Data Rate (CAN FD) (xilinx.com) 特征: 支持8Mb/s的CANFD多达 3 个数据位发送器延迟补偿(TDC, transmitter delay compensation)32-deep T…...

操作系统——cpu、内存、缓存介绍

一、内存是什么 内存就是系统资源的代名词,它是其他硬件设备与 CPU 沟通的桥梁, 计算机中的所有程序都在内存中运行。其作用是暂时存放CPU的运算数据,以及与硬盘交换的数据。也是相当于CPU与硬盘沟通的桥梁。只要计算机在运行,CP…...

【理解机器学习算法】之岭回归Ridge - L2 Rgularization

Ridge 回归(Ridge Regression)也称作岭回归或脊回归,是一种专用于共线性数据分析的有偏估计回归方法。在多元线性回归中,如果数据集中的特征(自变量)高度相关,也就是说存在共线性(Multicollinea…...

【Linux进程状态】

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 前言 一、直接谈论Linux的进程状态 看看Linux内核源代码怎么说 1.1、R状态 -----> 进程运行的状态 1.2、S状态 -----> 休眠状态(进程在等待“资源”就绪) 1.3、T状…...

【RS422】基于未来科技FT4232HL芯片的多波特率串口通信收发实现

功能简介 串行通信接口常常用于在计算机和低速外部设备之间传输数据。串口通信存在多种标准,以RS422为例,它将数据分成多个位,采用异步通信方式进行传输。   本文基于Xilinx VCU128 FPGA开发板,对RS422串口通信进行学习。   根…...

Internet协议的安全性

Internet协议的安全性 文章目录 Internet协议的安全性1. 网络层1. IP*62. ARP*33. ICMP * 3 2. 传输层协议1. TCP1. * SYN-Flood攻击攻击检测* 防御 2. TCP序号攻击攻击 3. 拥塞机制攻击 2. UDP 3. 应用层协议1. DNS攻击*3防范*3: 2. FTP3. TELNET: 改用ssh4. 电子邮件1. 攻击2…...

LeetCode每日一题——移除元素

移除元素OJ链接:27. 移除元素 - 力扣(LeetCode) 题目: 思路: 题目给定要求只能使用O(1)的额外空间并且原地修改输入数组,然后返回移除后的数组行长度。那 么我们就可以确我没有办法建立临时的数组存放我…...

vue3之自定义指令

除了 Vue 内置的一系列指令 (比如 v-model 或 v-show) 之外&#xff0c;Vue 还允许你注册自定义的指令。自定义指令主要是为了重用涉及普通元素的底层 DOM 访问的逻辑。 写法 1. 没有使用 <script setup>的情况下 export default {setup() {/*...*/},directives: {// 在…...

MySQL语法分类 DQL(5)分组查询

为了更好的学习这里给出基本表数据用于查询操作 create table student (id int, name varchar(20), age int, sex varchar(5),address varchar(100),math int,english int );insert into student (id,name,age,sex,address,math,english) values (1,马云,55,男,杭州,66,78),…...