Класс QPixmapCache
Класс QPixmapCache предоставляет кэш пиктограмм для всего приложения. Подробнее...
| Заголовок: | #include <QPixmapCache> |
| qmake: | QT += gui |
Типы public
| класс | Ключ |
Статические public члены
| int | cacheLimit() |
| void | clear() |
| bool | find(const QString &key, QPixmap *pixmap) |
| bool | find(const QPixmapCache::Key &key, QPixmap *pixmap) |
| bool | insert(const QString &key, const QPixmap &pixmap) |
| QPixmapCache::Key | insert(const QPixmap &pixmap) |
| void | remove(const QString &key) |
| void | remove(const QPixmapCache::Key &key) |
| bool | replace(const QPixmapCache::Key &key, const QPixmap &pixmap) |
| void | setCacheLimit(int n) |
Подробное описание
Этот класс — инструмент для оптимизированного рисования с помощью QPixmap. Его можно использовать для хранения временных пиктограмм, которые сложно генерировать, без использования большего объёма памяти, чем cacheLimit. Для добавления пиктограмм используйте insert(), для поиска — find(), а для очистки кэша — clear().
QPixmapCache не содержит данных членов, только статические функции для доступа к глобальному кэшу пиктограмм. Он создаёт внутренний объект QCache для кэширования пиктограмм.
Кэш связывает пиктограмму с предоставленной пользователем строкой в качестве ключа или с QPixmapCache::Key, сгенерированным кэшем. Использование QPixmapCache::Key в качестве ключей быстрее, чем использование строк. Строковый API очень удобен для сложных ключей, но API QPixmapCache::Key будет очень эффективным и удобным для однозначного отображения объекта на пиктограмму — в этом случае вы можете хранить ключи как члены объекта.
Если две пиктограммы вставлены в кэш с одинаковыми ключами, последняя пиктограмма заменит первую в кэше. Это соответствует поведению классов QHash и QCache.
Кэш заполняется, когда общий размер всех пиктограмм в кэше превышает cacheLimit. Начальное ограничение кэша составляет 10240 КБ (10 МБ); его можно изменить, вызвав setCacheLimit() с требуемым значением. Пиктограмма занимает примерно (ширина * высота * глубина)/8 байт памяти.
Статья в Qt Quarterly «Оптимизация с помощью QPixmapCache» объясняет, как использовать QPixmapCache для ускорения приложений путём кэширования результатов рисования.
Примечание: QPixmapCache можно использовать только из основного потока приложения. Доступ из других потоков будет проигнорирован и вернёт ошибку.
Документация по функциям-членам
[static] int QPixmapCache::cacheLimit()
Возвращает ограничение кэша (в килобайтах).
Значение по умолчанию для ограничения кэша составляет 10240 КБ.
См. также setCacheLimit().
[static] void QPixmapCache::clear()
Удаляет все пиктограммы из кэша.
[static] bool QPixmapCache::find(const QString &key, QPixmap *pixmap)
Ищет кэшированную пиктограмму, связанную с заданным ключом в кэше. Если пиктограмма найдена, функция устанавливает pixmap на эту пиктограмму и возвращает true; в противном случае оставляет pixmap без изменений и возвращает false.
Пример:
QPixmap pm;
if (!QPixmapCache::find("my_big_image", &pm)) {
pm.load("bigimage.png");
QPixmapCache::insert("my_big_image", pm);
}
painter->drawPixmap(0, 0, pm); Эта функция была добавлена в Qt 4.6.
[static] bool QPixmapCache::find(const QPixmapCache::Key &key, QPixmap *pixmap)
Ищет кэшированную пиктограмму, связанную с заданным ключом в кэше. Если пиктограмма найдена, функция устанавливает pixmap на эту пиктограмму и возвращает true; в противном случае оставляет pixmap без изменений и возвращает false. Если пиктограмма не найдена, это означает, что ключ больше не действителен, поэтому он будет освобождён для следующей вставки.
Эта функция была добавлена в Qt 4.6.
[static] bool QPixmapCache::insert(const QString &key, const QPixmap &pixmap)
Вставляет копию пиктограммы pixmap, связанной с ключом, в кэш.
Все пиктограммы, вставленные библиотекой Qt, имеют ключ, начинающийся с "$qt", поэтому ваши собственные ключи пиктограмм никогда не должны начинаться с "$qt".
Когда пиктограмма вставляется, а кэш приближается к пределу, удаляются пиктограммы до тех пор, пока не будет достаточно места для вставки пиктограммы.
Самые старые пиктограммы (менее недавно доступные в кэше) удаляются, когда необходимо больше места.
Функция возвращает true если объект был вставлен в кэш; в противном случае возвращает false.
См. также setCacheLimit().
[static] QPixmapCache::Key QPixmapCache::insert(const QPixmap &pixmap)
Вставляет копию заданной pixmap в кэш и возвращает ключ, который можно использовать для её извлечения.
Когда пиктограмма вставляется, а кэш приближается к пределу, удаляются пиктограммы до тех пор, пока не будет достаточно места для вставки пиктограммы.
Самые старые пиктограммы (менее недавно доступные в кэше) удаляются, когда необходимо больше места.
Эта функция была добавлена в Qt 4.6.
См. также setCacheLimit() и replace().
[static] void QPixmapCache::remove(const QString &key)
Удаляет пиктограмму, связанную с ключом, из кэша.
[static] void QPixmapCache::remove(const QPixmapCache::Key &key)
Удаляет пиктограмму, связанную с ключом, из кэша и освобождает ключ для будущей вставки.
Эта функция была добавлена в Qt 4.6.
[static] bool QPixmapCache::replace(const QPixmapCache::Key &key, const QPixmap &pixmap)
Заменяет пиктограмму, связанную с заданным ключом, на указанную pixmap. Возвращает true если pixmap была успешно вставлена в кэш; в противном случае возвращает false.
Эта функция была добавлена в Qt 4.6.
См. также setCacheLimit() и insert().
[static] void QPixmapCache::setCacheLimit(int n)
Устанавливает ограничение кэша на n килобайт.
Значение по умолчанию — 10240 КБ.
См. также cacheLimit().
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.14/qpixmapcache.html