Auf dieser Seite

QNetworkDiskCache Class

Die Klasse „QNetworkDiskCache“ stellt einen sehr einfachen Festplatten-Cache bereit. Mehr...

Header: #include <QNetworkDiskCache>
CMake: find_package(Qt6 REQUIRED COMPONENTS Network)
target_link_libraries(mytarget PRIVATE Qt6::Network)
qmake: QT += network
Erbt von: QAbstractNetworkCache

Öffentliche Funktionen

QNetworkDiskCache(QObject *parent = nullptr)
virtual ~QNetworkDiskCache()
QString cacheDirectory() const
QNetworkCacheMetaData fileMetaData(const QString &fileName) const
qint64 maximumCacheSize() const
void setCacheDirectory(const QString &cacheDir)
void setMaximumCacheSize(qint64 size)

Neu implementierte öffentliche Funktionen

virtual qint64 cacheSize() const override
virtual QIODevice *data(const QUrl &url) override
virtual void insert(QIODevice *device) override
virtual QNetworkCacheMetaData metaData(const QUrl &url) override
virtual QIODevice *prepare(const QNetworkCacheMetaData &metaData) override
virtual bool remove(const QUrl &url) override
virtual void updateMetaData(const QNetworkCacheMetaData &metaData) override

Öffentliche Slots

virtual void clear() override

Geschützte Funktionen

virtual qint64 expire()

Ausführliche Beschreibung

QNetworkDiskCache speichert jede URL in einer eigenen Datei im Verzeichnis „ cacheDirectory “ unter Verwendung von QDataStream. Dateien mit einem Text-MIME-Typ werden mit qCompress komprimiert. Daten werden nur in den Funktionen insert() und updateMetaData() auf die Festplatte geschrieben.

Derzeit ist es nicht möglich, dieselben Cache-Dateien für mehr als einen Festplatten-Cache gemeinsam zu nutzen.

QNetworkDiskCache begrenzt standardmäßig den Speicherplatz, den der Cache auf dem System belegt, auf 50 MB.

Beachten Sie, dass Sie das Cache-Verzeichnis festlegen müssen, bevor es funktioniert.

Ein Netzwerk-Festplatten-Cache kann wie folgt aktiviert werden:

QNetworkAccessManager *manager = new QNetworkAccessManager(this);
QNetworkDiskCache *diskCache = new QNetworkDiskCache(this);
QString directory = QStandardPaths::writableLocation(QStandardPaths::CacheLocation)
        + QLatin1StringView("/cacheDir/");
diskCache->setCacheDirectory(directory);
manager->setCache(diskCache);

Beachten Sie beim Senden von Anfragen Folgendes, um festzulegen, wann der Cache und wann das Netzwerk verwendet werden soll:

using namespace Qt::StringLiterals;
// do a normal request (preferred from network, as this is the default)
QNetworkRequest request(QUrl(u"http://qt-project.org"_s));
manager->get(request);

// do a request preferred from cache
QNetworkRequest request2(QUrl(u"http://qt-project.org"_s));
request2.setAttribute(QNetworkRequest::CacheLoadControlAttribute, QNetworkRequest::PreferCache);
manager->get(request2);

Um zu überprüfen, ob die Antwort aus dem Cache oder aus dem Netzwerk stammt, kann Folgendes angewendet werden:

void replyFinished(QNetworkReply*reply) {
    QVariant fromCache = reply->attribute(QNetworkRequest::SourceIsFromCacheAttribute);
    qDebug() << "page from cache?" << fromCache.toBool();
}

Sicherheitshinweise

QNetworkDiskCache speichert HTTP-Antwortinhalte und Metadaten, einschließlich Antwort-Header, unverschlüsselt auf der Festplatte. Die auf Textinhalte angewendete Komprimierung dient ausschließlich der Speichereffizienz und bietet keinen Schutz der Vertraulichkeit.

Welche Antworten zwischengespeichert werden, wird in erster Linie durch die vom Server gesendeten HTTP-Cache-Control-Header bestimmt. Richtig konfigurierte Server verhindern in der Regel die Zwischenspeicherung von Antworten, die sensible Daten aus authentifizierten Sitzungen enthalten. Die Anwendung kann sich jedoch nicht darauf verlassen, dass jeder Server dies korrekt umsetzt, und was der Server als nicht sensibel einstuft, entspricht möglicherweise nicht den Anforderungen der Anwendung.

Für Fälle, in denen die Caching-Richtlinie des Servers nicht ausreicht:

Cache-Einträge durchlaufen eine grundlegende strukturelle Validierung, können jedoch aufgrund von Festplattenfehlern, einem nicht ordnungsgemäßen Beenden der Anwendung oder anderen Ursachen ungültig werden. Anwendungen sollten zwischengespeicherte Daten ohne unabhängige Validierung nicht als vertrauenswürdig behandeln.

Dokumentation der Member-Funktionen

[explicit] QNetworkDiskCache::QNetworkDiskCache(QObject *parent = nullptr)

Erstellt einen neuen Festplatten-Cache. Das Argument „ parent “ wird an den Konstruktor von „ QAbstractNetworkCache “ übergeben.

[virtual noexcept] QNetworkDiskCache::~QNetworkDiskCache()

Löscht das Cache-Objekt. Der Festplatten-Cache wird dabei nicht geleert.

QString QNetworkDiskCache::cacheDirectory() const

Gibt den Speicherort zurück, an dem zwischengespeicherte Dateien abgelegt werden.

Siehe auch „ setCacheDirectory()“.

[override virtual] qint64 QNetworkDiskCache::cacheSize() const

Implementiert: ` QAbstractNetworkCache::cacheSize()` const.

[override virtual slot] void QNetworkDiskCache::clear()

Implementiert: QAbstractNetworkCache::clear().

[override virtual] QIODevice *QNetworkDiskCache::data(const QUrl &url)

Implementiert: ` QAbstractNetworkCache::data` (const QUrl &url).

[virtual protected] qint64 QNetworkDiskCache::expire()

Leert den Cache, sodass seine Größe unter der maximalen Cache-Größe liegt. Gibt die aktuelle Größe des Caches zurück.

Wenn die aktuelle Größe des Caches größer ist als der Wert von ` maximumCacheSize()`, werden ältere Cache-Dateien entfernt, bis die Gesamtgröße weniger als 90 % des Werts von ` maximumCacheSize()` beträgt, wobei mit den ältesten Dateien begonnen wird und das Erstellungsdatum der Datei zur Bestimmung des Alters einer Cache-Datei herangezogen wird.

Unterklassen können diese Funktion neu implementieren, um die Reihenfolge zu ändern, in der Cache-Dateien entfernt werden, wobei Informationen berücksichtigt werden, die der Anwendung bekannt sind, QNetworkDiskCache jedoch nicht, beispielsweise die Häufigkeit des Zugriffs auf einen Cache.

Hinweis: Aufrufe von` cacheSize()` verfallen, wenn die aktuelle Cache-Größe unbekannt ist.

Siehe auch ` maximumCacheSize()` und ` fileMetaData()`.

QNetworkCacheMetaData QNetworkDiskCache::fileMetaData(const QString &fileName) const

Gibt die „ QNetworkCacheMetaData “ für die Cache-Datei „ fileName “ zurück.

Wenn „ fileName “ keine Cache-Datei ist, ist „ QNetworkCacheMetaData “ ungültig.

[override virtual] void QNetworkDiskCache::insert(QIODevice *device)

Implementiert: ` QAbstractNetworkCache::insert` (`QIODevice *device`).

qint64 QNetworkDiskCache::maximumCacheSize() const

Gibt die aktuelle maximale Größe des Festplatten-Caches zurück.

Siehe auch ` setMaximumCacheSize()`.

[override virtual] QNetworkCacheMetaData QNetworkDiskCache::metaData(const QUrl &url)

Implementiert: ` QAbstractNetworkCache::metaData` (const QUrl &url).

[override virtual] QIODevice *QNetworkDiskCache::prepare(const QNetworkCacheMetaData &metaData)

Implementiert neu: ` QAbstractNetworkCache::prepare` (const QNetworkCacheMetaData &metaData).

[override virtual] bool QNetworkDiskCache::remove(const QUrl &url)

Implementiert: ` QAbstractNetworkCache::remove` (const QUrl &url).

void QNetworkDiskCache::setCacheDirectory(const QString &cacheDir)

Legt das Verzeichnis fest, in dem zwischengespeicherte Dateien abgelegt werden, auf cacheDir

QNetworkDiskCache Dieses Verzeichnis wird erstellt, falls es noch nicht existiert.

Vorbereitete Cache-Elemente werden beim Einfügen im neuen Cache-Verzeichnis gespeichert.

Siehe auch cacheDirectory() und QStandardPaths::CacheLocation.

void QNetworkDiskCache::setMaximumCacheSize(qint64 size)

Legt die maximale Größe des Festplatten-Caches auf „ size “ fest.

Ist die neue Größe kleiner als die aktuelle Cache-Größe, ruft der Cache die Funktion ` expire()` auf.

Siehe auch ` maximumCacheSize()`.

[override virtual] void QNetworkDiskCache::updateMetaData(const QNetworkCacheMetaData &metaData)

Implementiert neu: ` QAbstractNetworkCache::updateMetaData` (const QNetworkCacheMetaData &metaData).

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.