最近我發現我可以修改在線存儲的txt文件,然後當我使用QHttp獲取時,我仍然獲得以前的版本。我的代碼也使用QtWebKit所以也許這涉及到這個問題?或者,也許我錯過了一個可以防止緩存的設置?如何從緩存頁面停止QHttp/QtWebKit
(我使用Qt 4.7.3的Windows 7下,在Visual Studio 2010的外接編譯)
我是從什麼緩存執行以下操作以防止QtWebKit的 -
QWebSettings::globalSettings()->setAttribute(QWebSettings::PrivateBrowsingEnabled, true);
QWebSettings::globalSettings()->setAttribute(QWebSettings::LocalContentCanAccessRemoteUrls, true);
QWebSettings::setMaximumPagesInCache(0);
QWebSettings::setObjectCacheCapacities(0, 0, 0);
QWebSettings::clearMemoryCaches();
我使用加載TXT文件中的代碼如下 -
CacheHTML::CacheHTML(QObject* parent, QString urlId, QByteArray* bytes, QString stringUrl) : QObject(parent) {
this->urlId = urlId;
QUrl url = QUrl(stringUrl);
http = new QHttp(this);
connect(http, SIGNAL(requestFinished(int, bool)), this, SLOT(Loaded(int, bool)));
pBytes = bytes;
buffer = new QBuffer(pBytes, this);
buffer->open(QIODevice::WriteOnly);
http->setHost(url.host());
fetchId = http->get(url.toString(), buffer);
}
我使用與此對應的時隙是 -
void CacheHTML::Loaded(int id, bool error) {
if(id != fetchId)
return;
if(error) {
emit CacheComplete(urlId, false);
return;
}
emit CacheComplete(urlId, true);
}
但是,一旦它從互聯網提取的txt文件,它似乎是緩存在某處/某種程度。無論我在txt文件中做什麼修改,當我運行我的代碼時,它仍然會緩衝原始文件。
我已經試過OrcunC的建議(見下文),但是這會導致接收一個空字符串,而不是txt文件的內容 -
CacheHTML::CacheHTML(QObject* parent, QString urlId, QByteArray* bytes, QString stringUrl) : QObject(parent) {
this->urlId = urlId;
QUrl url = QUrl(stringUrl);
http = new QHttp(this);
connect(http, SIGNAL(requestFinished(int, bool)), this, SLOT(Loaded(int, bool)));
pBytes = bytes;
buffer = new QBuffer(pBytes, this);
buffer->open(QIODevice::WriteOnly);
QHttpRequestHeader header("GET", url.path());
header.setValue("Cache-Control", "no-cache");
header.setValue("Host", url.host());
http->setHost(url.host());
fetchId = http->request(header);
}
我也試着用不同的方式爲實現它如下所示,但獲得了與txt文件正在緩存的結果相同的結果。即使檢查QNetworkReply在完成槽與布爾fromCache = reply->屬性(QNetworkRequest :: SourceIsFromCacheAttribute).toBool()返回假。
QNetworkAccessManager* manager = new QNetworkAccessManager(this);
connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(Loaded(QNetworkReply*)));
QNetworkRequest req = QNetworkRequest(QUrl(stringUrl));
req.setAttribute(QNetworkRequest::CacheLoadControlAttribute, QNetworkRequest::AlwaysNetwork);
req.setAttribute(QNetworkRequest::CacheSaveControlAttribute, false);
manager->get(req);
我現在在我的智慧的結尾,所以任何人指出我在正確的方向非常感激。
感謝您的回覆 - 我嘗試了您的建議(並修改了原始問題以顯示代碼),但導致出現空字符串返回而不是txt文件的內容。 – Rok