最近、私はオンラインで保存されたtxtファイルを変更できることを発見しました。QHttp私はまだ前のバージョンを取得しています。私のコードもQtWebKitを使用しています。多分これは何とか問題に関連していますか?それとも、キャッシュを妨げる設定が欠けているのでしょうか?QHttp/QtWebKitがページをキャッシュするのを止める方法
(私は、Windows 7の下のQt 4.7.3を使用して、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();
を
Iは次のように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);
}
私はこれに対応して使用しているスロットがある -
しかし、いったんインターネットから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