Sur cette page

QNetworkDiskCache Class

La classe QNetworkDiskCache fournit un cache disque très basique. Plus d'informations...

En-tête : #include <QNetworkDiskCache>
CMake : find_package(Qt6 REQUIRED COMPONENTS Network)
target_link_libraries(mytarget PRIVATE Qt6::Network)
qmake : QT += network
Hérite : QAbstractNetworkCache

Fonctions publiques

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)

Fonctions publiques réimplémentées

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

Emplacements publics

virtual void clear() override

Fonctions protégées

virtual qint64 expire()

Description détaillée

QNetworkDiskCache stocke chaque url dans son propre fichier à l'intérieur de cacheDirectory en utilisant QDataStream. Les fichiers ayant un MimeType texte sont compressés à l'aide de qCompress. Les données sont écrites sur le disque uniquement dans insert() et updateMetaData().

Actuellement, vous ne pouvez pas partager les mêmes fichiers de cache avec plus d'un cache disque.

QNetworkDiskCache limite par défaut l'espace utilisé par le cache sur le système à 50 Mo.

Notez que vous devez définir le répertoire du cache avant qu'il ne fonctionne.

Un cache de disque réseau peut être activé par :

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

Lors de l'envoi de requêtes, pour contrôler la préférence entre l'utilisation du cache et l'utilisation du réseau, tenez compte des éléments suivants :

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);

Pour vérifier si la réponse provient du cache ou du réseau, on peut appliquer ce qui suit :

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

Documentation des fonctions membres

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

Crée un nouveau cache disque. L'argument parent est transmis au constructeur de QAbstractNetworkCache.

[virtual noexcept] QNetworkDiskCache::~QNetworkDiskCache()

Détruit l'objet cache. Cela n'efface pas le cache du disque.

QString QNetworkDiskCache::cacheDirectory() const

Renvoie l'emplacement où les fichiers mis en cache seront stockés.

Voir aussi setCacheDirectory().

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

Réimplémente : QAbstractNetworkCache::cacheSize() const.

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

Réimplémente : QAbstractNetworkCache::clear().

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

Réimplémente : QAbstractNetworkCache::data(const QUrl &url).

[virtual protected] qint64 QNetworkDiskCache::expire()

Nettoie le cache de manière à ce que sa taille soit inférieure à la taille maximale du cache. Renvoie la taille actuelle du cache.

Lorsque la taille actuelle du cache est supérieure à maximumCacheSize(), les fichiers de cache les plus anciens sont supprimés jusqu'à ce que la taille totale soit inférieure à 90 % de maximumCacheSize(), en commençant par les plus anciens et en utilisant la date de création du fichier pour déterminer l'ancienneté d'un fichier de cache.

Les sous-classes peuvent réimplémenter cette fonction pour modifier l'ordre dans lequel les fichiers de cache sont supprimés en tenant compte des informations que l'application connaît et que QNetworkDiskCache ne connaît pas, par exemple le nombre d'accès au cache.

Remarque : les appels àcacheSize() expirent si la taille actuelle du cache est inconnue.

Voir également maximumCacheSize() et fileMetaData().

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

Renvoie l'adresse QNetworkCacheMetaData pour le fichier cache fileName.

Si fileName n'est pas un fichier cache, QNetworkCacheMetaData sera invalide.

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

Réimplémente : QAbstractNetworkCache::insert(QIODevice *device).

qint64 QNetworkDiskCache::maximumCacheSize() const

Renvoie la taille maximale actuelle du cache disque.

Voir aussi setMaximumCacheSize().

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

Réimplémente : QAbstractNetworkCache::metaData(const QUrl &url).

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

Réimplémente : QAbstractNetworkCache::prepare(const QNetworkCacheMetaData &metaData).

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

Réimplémente : QAbstractNetworkCache::remove(const QUrl &url).

void QNetworkDiskCache::setCacheDirectory(const QString &cacheDir)

Définit le répertoire dans lequel les fichiers mis en cache seront stockés cacheDir

QNetworkDiskCache crée ce répertoire s'il n'existe pas.

Les éléments de cache préparés seront stockés dans le nouveau répertoire de cache lorsqu'ils seront insérés.

Voir aussi cacheDirectory() et QStandardPaths::CacheLocation.

void QNetworkDiskCache::setMaximumCacheSize(qint64 size)

Définit la taille maximale du cache disque à size.

Si la nouvelle taille est inférieure à la taille actuelle du cache, le cache appellera expire().

Voir aussi maximumCacheSize().

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

Réimplémente : 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.