gpt4 book ai didi

c++ - 在 QWebView 中覆盖页面回复

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:19:49 25 4
gpt4 key购买 nike

我正在尝试拦截 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, request, ioDevice);
}

return response;
}

正如您在上面看到的,我已经覆盖了 QNAM createRequest 方法以接收所有页面请求并在 Url 以 .ajax 扩展名结尾时使用 JSON 对象进行响应。但是我发现很难将数据写回网络流。

关于如何进行此操作的任何提示或技巧?

干杯,本

更新:

嗨阿比吉斯,我尝试过您的解决方案,但无法将信号连接到插槽。

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();
}

错误:

对象::连接:没有这样的插槽 ngcBrowser::replyRecieved(QNetworkReply*)

更新:

好的,我已经设法让他工作了,但是当我尝试写入 IODevice 时失败,表明它是只读设备。

感谢所有的帮助。

最佳答案

有很多方法可以做到这一点。这是一种方式。

connect(networkAccessManager,SIGNAL(finished(QNetworkReply*)),this,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 完成回复等。

关于c++ - 在 QWebView 中覆盖页面回复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6060948/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com