使用Ajax请求从QWebView读取本地文件

Read local file from QWebView using Ajax request

本文关键字:文件 读取 QWebView Ajax 请求 使用      更新时间:2023-10-16

我正在开发一个封装HTML5/JQuery web应用程序的Qt/C++程序。

我曾经发出Ajax请求从服务器读取文件。但现在,我希望Qt从本地磁盘读取一个文件,并将其内容发送到我的网络应用程序。

我想我需要Qt来捕获来自web应用程序的Ajax请求,并将文件内容作为Ajax请求结果返回。

问题是我不知道该怎么办。目前,我还没有在谷歌上找到任何关于这方面的信息。

欢迎任何帮助!

我终于找到了如何做到这一点。我重写了QNetworkAccessManager

MyQNetworkAccessManager.h:

class MyQNetworkAccessManager : public QNetworkAccessManager
{
    Q_OBJECT
protected:
    virtual QNetworkReply * createRequest(Operation op, const QNetworkRequest & req, QIODevice * outgoingData = 0);
};

MyQNetworkAccessManager.cpp:

QNetworkReply * MyQNetworkAccessManager::createRequest(Operation op, const QNetworkRequest & req, QIODevice * outgoingData) {
    QUrl url = req.url();
    QString path = url.path();
    if (op == QNetworkAccessManager::GetOperation && path.endsWith("xml")) {
        QUrl newUrl;
        if(path.endsWith("..")) {
            newUrl.setUrl("...");
        }
        else if(path.endsWith("...")) {
            newUrl.setUrl("...");
        }
        else {
            newUrl = url;
        }
        return QNetworkAccessManager::createRequest(QNetworkAccessManager::GetOperation, QNetworkRequest(newUrl));
    }
    else
    {
        return QNetworkAccessManager::createRequest(op, req, outgoingData);
    }
}

MainWindow.cpp:

// ....
QWebView *qWebView = new QWebView();
QWebPage *page = qWebView->page();
MyQNetworkAccessManager *networkManager = new MyQNetworkAccessManager();
page->setNetworkAccessManager(networkManager);
qWebView->setPage(page);
qWebView->load(QUrl("..."));
// ....