QWebEngineView可以和js交互需要使用QWebChannel,如果不使用的话,js可以请求自定义网址协议,相当于请求服务器,但是不用Qt专门做服务器,不占用系统端口。
如果结合系统自定义URL注册,可以达到访问自定义URL,启动我们的Qt程序,程序里再处理自定义URL网址
1.继承QWebEngineUrlSchemeHandler 创建协议处理类
class AMUrlSchemeHandler : public QWebEngineUrlSchemeHandler
{
Q_OBJECT
public:
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());

最低0.47元/天 解锁文章
5044

被折叠的 条评论
为什么被折叠?



