我开发的Qt / C ++程序,封装了一个HTML5 / JQuery的Web应用程序。
I am developing a Qt/C++ program which encapsulates an HTML5/JQuery web app.
我用来做Ajax请求从服务器读取文件。但现在,我想Qt来从本地磁盘读取文件并发送它的内容到我的Web应用程序。
I used to make Ajax requests to read files from a server. But now, I would like Qt to read a file from the local disk and send its content to my web app.
我想我需要的Qt可以捕捉到Web应用程序的Ajax请求并返回该文件的内容作为Ajax请求的结果。
I think I need Qt to catch Ajax requests from the web app and return the file content as the Ajax request result.
现在的问题是,我不知道该怎么办。现在,我还没有发现有关在谷歌任何东西。
The problem is I don't know how to do. For now, I've not found anything about that on google.
任何帮助是值得欢迎的!
Any help is welcome!
我终于找到了如何做到这一点。我推翻 QNetworkAccessManager
。
I finally found how to do it. I overrode 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("..."));
// ....