c – 在QWebView中覆盖页面回复
发布时间:2020-12-16 06:56:32 所属栏目:百科 来源:网络整理
导读:我试图拦截Qt的QWebView中的页面/表单请求,并在某些情况下使用替代内容进行响应. QNetworkReply* ngcBrowser::createRequest(Operation operation,const QNetworkRequest request,QIODevice* ioDevice){ view-page()-setNetworkAccessManager(this); QNetwor
我试图拦截Qt的QWebView中的页面/表单请求,并在某些情况下使用替代内容进行响应.
QNetworkReply* ngcBrowser::createRequest(Operation operation,const QNetworkRequest& request,QIODevice* ioDevice) { view->page()->setNetworkAccessManager(this); QNetworkReply* response = NULL; if (request.url().path().endsWith("ajax")) { response = QNetworkAccessManager::createRequest(operation,request,ioDevice); response->write("{ success: true }"); } else { response = QNetworkAccessManager::createRequest(operation,ioDevice); } return response; } 如上所示,我已覆盖QNAM createRequest方法以接收所有页面请求,并在Url以.ajax扩展名结尾时使用JSON对象进行响应.但是我发现很难将数据写回网络流. 如何解决这个问题的任何提示或提示? 干杯, 更新: 嗨Abhijith, QNetworkAccessManager* nam = view->page()->networkAccessManager(); bool status = QObject::connect(nam,SIGNAL(finished(QNetworkReply*)),this,SLOT(replyReceived(QNetworkReply*))); if(!status) { QErrorMessage errorMessage; errorMessage.showMessage("connect failed"); errorMessage.exec(); } 错误: Object :: connect:没有这样的插槽ngcBrowser :: replyRecieved(QNetworkReply *) 更新: 好的,我设法让他的工作,但是当我试图写入IODevice失败表明它是一个ReadOnly设备. 谢谢你的帮助. 解决方法
有很多方法可以做到这一点.这是一种方式.
connect(networkAccessManager,SLOT(replyReceived(QNetworkReply*))) .... void replyReceived(QNetworkReply* reply) // reply slot { if(reply->request().url().path().endsWith("ajax")) { QByteArray array = reply->readll();/*reply is cleared after this call and will not contains anything.*/ /*Write the JSON wherever you want to in the array*/ reply->write(array); } } 您必须根据您想要收听的信号对此进行微调 – 从QNAM回复完成或从QNetworkReply等处完成. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |