최근 온라인에서 저장 한 txt 파일을 수정할 수 있다는 것을 발견했습니다. QHttp 여전히 이전 버전을 사용하고 있습니다. 내 코드도 QtWebKit을 사용했습니다. 어쩌면이 문제와 관련이 있습니다. 아니면 그냥 캐싱을 방지하는 설정이 누락 되었습니까?QHttp/QtWebKit에서 캐싱 페이지를 멈추는 방법
(I 윈도우 7에서 Qt는 4.7.3을 사용하고 비주얼 스튜디오 2010 추가 기능과 함께 컴파일거야) 난 아무것도 캐싱에서 을 방지하기 위해 다음과 같은 QtWebKit을하고 있어요
-
QWebSettings::globalSettings()->setAttribute(QWebSettings::PrivateBrowsingEnabled, true);
QWebSettings::globalSettings()->setAttribute(QWebSettings::LocalContentCanAccessRemoteUrls, true);
QWebSettings::setMaximumPagesInCache(0);
QWebSettings::setObjectCacheCapacities(0, 0, 0);
QWebSettings::clearMemoryCaches();
을
이
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 파일을로드하는 데 사용하고 코드는
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 의하면 비록 에이 거짓을 반환() = BOOL 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