QNetworkDiskCache Class

Die Klasse QNetworkDiskCache bietet einen sehr einfachen Disk-Cache. Mehr...

Kopfzeile: #include <QNetworkDiskCache>
CMake: find_package(Qt6 REQUIRED COMPONENTS Network)
target_link_libraries(mytarget PRIVATE Qt6::Network)
qmake: QT += network
Erbt: 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)

Reimplementierte ö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()

Detaillierte Beschreibung

QNetworkDiskCache speichert jede Url in einer eigenen Datei innerhalb von cacheDirectory unter Verwendung von QDataStream. Dateien mit einem Text-MimeType werden mit qCompress komprimiert. Die Daten werden nur in insert() und updateMetaData() auf die Festplatte geschrieben.

Derzeit können Sie nicht dieselben Cache-Dateien mit mehr als einem Disk-Cache teilen.

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 Netzwerkplatten-Cache kann aktiviert werden durch:

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

Um beim Senden von Anfragen zu steuern, wann der Cache und wann das Netzwerk verwendet werden soll, sollten Sie Folgendes beachten:

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 prüfen, ob die Antwort aus dem Cache oder aus dem Netz stammt, kann Folgendes angewendet werden:

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

Dokumentation der Mitgliedsfunktionen

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

Erzeugt einen neuen Disk-Cache. Das Argument parent wird an den Konstruktor von QAbstractNetworkCache übergeben.

[virtual noexcept] QNetworkDiskCache::~QNetworkDiskCache()

Zerstört das Cache-Objekt. Der Disk-Cache wird dabei nicht gelöscht.

QString QNetworkDiskCache::cacheDirectory() const

Gibt den Ort zurück, an dem die Dateien im Cache gespeichert werden.

Siehe auch setCacheDirectory().

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

Reimplements: QAbstractNetworkCache::cacheSize() const.

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

Reimplements: QAbstractNetworkCache::clear().

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

Reimplements: QAbstractNetworkCache::data(const QUrl &url).

[virtual protected] qint64 QNetworkDiskCache::expire()

Räumt den Cache auf, so dass 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 Cache größer als maximumCacheSize() ist, werden ältere Cache-Dateien entfernt, bis die Gesamtgröße weniger als 90% von maximumCacheSize() beträgt. Dabei wird mit den ältesten Dateien begonnen und das Erstellungsdatum verwendet, um zu bestimmen, wie alt eine Cache-Datei ist.

Unterklassen können diese Funktion neu implementieren, um die Reihenfolge zu ändern, in der Cache-Dateien entfernt werden. Dabei werden Informationen berücksichtigt, die der Anwendung bekannt sind und die QNetworkDiskCache nicht kennt, zum Beispiel die Anzahl der Zugriffe auf einen Cache.

Hinweis: cacheSize()-Aufrufe laufen ab, 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)

Reimplements: QAbstractNetworkCache::insert(QIODevice *Gerät).

qint64 QNetworkDiskCache::maximumCacheSize() const

Gibt die aktuelle Maximalgröße für den Disk-Cache zurück.

Siehe auch setMaximumCacheSize().

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

Reimplements: QAbstractNetworkCache::metaData(const QUrl &url).

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

Reimplements: QAbstractNetworkCache::prepare(const QNetworkCacheMetaData &metaData).

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

Reimplements: QAbstractNetworkCache::remove(const QUrl &url).

void QNetworkDiskCache::setCacheDirectory(const QString &cacheDir)

Legt das Verzeichnis fest, in dem zwischengespeicherte Dateien gespeichert werden sollen cacheDir

QNetworkDiskCache erstellt dieses Verzeichnis, wenn es nicht existiert.

Vorbereitete Cache-Elemente werden in dem neuen Cache-Verzeichnis gespeichert, wenn sie eingefügt werden.

Siehe auch cacheDirectory() und QStandardPaths::CacheLocation.

void QNetworkDiskCache::setMaximumCacheSize(qint64 size)

Setzt die maximale Größe des Festplatten-Caches auf size.

Wenn die neue Größe kleiner ist als die aktuelle Cache-Größe, ruft der Cache expire() auf.

Siehe auch maximumCacheSize().

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

Reimplements: QAbstractNetworkCache::updateMetaData(const QNetworkCacheMetaData &metaData).

© 2025 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.