En esta página

QNetworkDiskCache Class

La clase QNetworkDiskCache proporciona una caché de disco muy básica. Más...

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

Funciones públicas

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)

Funciones públicas reimplementadas

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

Ranuras públicas

virtual void clear() override

Funciones protegidas

virtual qint64 expire()

Descripción detallada

QNetworkDiskCache almacena cada url en su propio fichero dentro de cacheDirectory usando QDataStream. Los archivos con un MimeType de texto se comprimen usando qCompress. Los datos se escriben en disco sólo en insert() y updateMetaData().

Actualmente no se pueden compartir los mismos archivos de caché con más de una caché de disco.

QNetworkDiskCache por defecto limita la cantidad de espacio que la caché utilizará en el sistema a 50MB.

Ten en cuenta que tienes que establecer el directorio de caché antes de que funcione.

Un caché de disco de red puede ser habilitado por:

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

Al enviar peticiones, para controlar la preferencia de cuándo utilizar la caché y cuándo utilizar la red, tenga en cuenta lo siguiente:

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

Para comprobar si la respuesta procede de la caché o de la red, se puede aplicar lo siguiente:

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

Documentación de las funciones miembro

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

Crea una nueva caché de disco. El argumento parent se pasa al constructor de QAbstractNetworkCache.

[virtual noexcept] QNetworkDiskCache::~QNetworkDiskCache()

Destruye el objeto caché. Esto no borra la caché de disco.

QString QNetworkDiskCache::cacheDirectory() const

Devuelve la ubicación donde se almacenarán los archivos en caché.

Véase también setCacheDirectory().

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

Reimplementa: QAbstractNetworkCache::cacheSize() const.

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

Reimplementa: QAbstractNetworkCache::clear().

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

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

[virtual protected] qint64 QNetworkDiskCache::expire()

Limpia la caché para que su tamaño sea inferior al tamaño máximo de caché. Devuelve el tamaño actual de la caché.

Cuando el tamaño actual de la caché es mayor que maximumCacheSize() se eliminan los archivos de caché más antiguos hasta que el tamaño total es inferior al 90% de maximumCacheSize() empezando primero por los más antiguos utilizando la fecha de creación del archivo para determinar la antigüedad de un archivo de caché.

Las subclases pueden reimplementar esta función para cambiar el orden en que se eliminan los archivos de caché teniendo en cuenta información de la aplicación que QNetworkDiskCache no conoce, por ejemplo el número de veces que se accede a una caché.

Nota: Las llamadas acacheSize() caducan si se desconoce el tamaño actual de la caché.

Véase también maximumCacheSize() y fileMetaData().

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

Devuelve el QNetworkCacheMetaData para el archivo de caché fileName.

Si fileName no es un archivo de caché QNetworkCacheMetaData no será válido.

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

Reimplementa: QAbstractNetworkCache::insert(QIODevice *device).

qint64 QNetworkDiskCache::maximumCacheSize() const

Devuelve el tamaño máximo actual de la caché de disco.

Véase también setMaximumCacheSize().

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

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

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

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

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

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

void QNetworkDiskCache::setCacheDirectory(const QString &cacheDir)

Establece el directorio en el que se almacenarán los archivos en caché. cacheDir

QNetworkDiskCache creará este directorio si no existe.

Los elementos de caché preparados se almacenarán en el nuevo directorio de caché cuando se inserten.

Véase también cacheDirectory() y QStandardPaths::CacheLocation.

void QNetworkDiskCache::setMaximumCacheSize(qint64 size)

Establece el tamaño máximo de la caché de disco en size.

Si el nuevo tamaño es menor que el tamaño actual de la caché, ésta llamará a expire().

Véase también maximumCacheSize().

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

Reimplementa: 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.