2011-05-19 40 views
4

我試圖在Qt的QWebView中攔截頁面/表單請求,並在某些情況下使用替代內容進行響應。在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方法來接收所有的頁面請求,並用JSON對象如果URL與阿賈克斯擴展名結尾迴應。但是我發現很難將數據寫回網絡流。

有關如何解決這個問題的任何提示或提示?

乾杯, 本

更新:

嗨阿濟斯, 我已經嘗試您的解決方案但它未能將信號連接到插槽。

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是失敗,指示其只讀設備。

感謝您的幫助。

+0

所以,如果一個網址與阿賈克斯結束,你只是想送JSON作爲答覆,沒有別的?或者你想追加你的JSON到http響應? – Abhijith 2011-05-19 15:52:25

+0

我希望將JSON附加到http響應中。感謝您的時間。 – Corvusoft 2011-05-19 15:58:13

回答

1

有很多方法可以做到這一點。這是一種方法。

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 replyfinished或QNetworkReply等成品

+0

你好Abhijith,關於他QNetworkReply是隻讀的事實的任何想法?感謝您的所有幫助順便說一句。 – Corvusoft 2011-05-20 14:56:37

+0

你試過qnetworkreply-> setOpenMode(QIODevice :: ReadWrite)嗎? – Abhijith 2011-05-20 15:00:16

+0

是的,但它的保護。 – Corvusoft 2011-05-20 15:01:00