Spec-Zone.ru › Qt 5.15

Класс QNetworkDiskCache

Класс QNetworkDiskCache предоставляет очень базовый кэш на диске. Подробнее...

Заголовок: #include <QNetworkDiskCache>
qmake: QT += network
С момента: Qt 4.5
Наследует: QAbstractNetworkCache

Этот класс был представлен в Qt 4.5.

  • Список всех членов, включая унаследованные

Открытые функции

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)

Переопределённые открытые функции

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

Открытые слоты

virtual void clear() override

Защищённые функции

virtual qint64 expire()

Подробное описание

QNetworkDiskCache хранит каждый URL в отдельном файле внутри cacheDirectory с использованием QDataStream. Файлы с текстовым MIME-типом сжимаются с помощью qCompress. Данные записываются на диск только в insert() и updateMetaData().

В настоящее время вы не можете совместно использовать те же файлы кэша с более чем одним кэшем на диске.

QNetworkDiskCache по умолчанию ограничивает объём места, которое кэш будет использовать в системе, до 50 МБ.

Обратите внимание, что вам необходимо установить каталог кэша, прежде чем он начнёт работать.

Кэш на диске можно включить следующим образом:

QNetworkAccessManager *manager = new QNetworkAccessManager(this);
QNetworkDiskCache *diskCache = new QNetworkDiskCache(this);
diskCache->setCacheDirectory("cacheDir");
manager->setCache(diskCache);

При отправке запросов для управления предпочтениями, когда использовать кэш, а когда сеть, рассмотрите следующее:

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

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

Для проверки того, пришёл ли ответ из кэша или из сети, можно применить следующее:

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

Документация по функциям-членам

QNetworkDiskCache::QNetworkDiskCache(QObject *parent = nullptr)

Создаёт новый кэш на диске. Аргумент parent передаётся в конструктор QAbstractNetworkCache.

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

Переопределяет: QAbstractNetworkCache::clear().

[virtual] QNetworkDiskCache::~QNetworkDiskCache()

Удаляет объект кэша. Это не очищает кэш на диске.

QString QNetworkDiskCache::cacheDirectory() const

Возвращает расположение, где будут храниться кэшированные файлы.

См. также setCacheDirectory().

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

Переопределяет: QAbstractNetworkCache::cacheSize() const.

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

Переопределяет: QAbstractNetworkCache::data(const QUrl &url).

[virtual protected] qint64 QNetworkDiskCache::expire()

Очищает кэш, чтобы его размер был меньше максимального размера кэша. Возвращает текущий размер кэша.

Когда текущий размер кэша больше, чем maximumCacheSize(), удаляются более старые файлы кэша до тех пор, пока общий размер не станет меньше 90% от maximumCacheSize(), начиная со старейших файлов, используя дату создания файла для определения возраста файла кэша.

Подклассы могут переопределять эту функцию, чтобы изменить порядок удаления файлов кэша, учитывая информацию, о которой QNetworkDiskCache не знает, например, число обращений к кэшу.

Примечание: cacheSize() вызывает expire, если текущий размер кэша неизвестен.

См. также maximumCacheSize() и fileMetaData().

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

Возвращает QNetworkCacheMetaData для файла кэша fileName.

Если fileName не является файлом кэша, QNetworkCacheMetaData будет недействительным.

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

Переопределяет: QAbstractNetworkCache::insert(QIODevice *device).

qint64 QNetworkDiskCache::maximumCacheSize() const

Возвращает текущий максимальный размер для кэша на диске.

См. также setMaximumCacheSize().

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

Переопределяет: QAbstractNetworkCache::metaData(const QUrl &url).

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

Переопределяет: QAbstractNetworkCache::prepare(const QNetworkCacheMetaData &metaData).

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

Переопределяет: QAbstractNetworkCache::remove(const QUrl &url).

void QNetworkDiskCache::setCacheDirectory(const QString &cacheDir)

Устанавливает каталог, где будут храниться кэшированные файлы, в cacheDir

QNetworkDiskCache создаст этот каталог, если он не существует.

Подготовленные элементы кэша будут храниться в новом каталоге кэша при их вставке.

См. также cacheDirectory() и QDesktopServices::CacheLocation.

void QNetworkDiskCache::setMaximumCacheSize(qint64 size)

Устанавливает максимальный размер кэша на диске в size.

Если новый размер меньше текущего размера кэша, то кэш вызовет expire().

См. также maximumCacheSize().

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

Переопределяет: QAbstractNetworkCache::updateMetaData(const QNetworkCacheMetaData &metaData).

© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.15/qnetworkdiskcache.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API