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.