Класс QPixmapCache
Класс QPixmapCache предоставляет кэширование пиксем в приложении. Подробнее...
| Заголовок: | #include <QPixmapCache> |
| CMake: | find_package(Qt6 COMPONENTS Gui REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Gui) |
| qmake: | QT += gui |
Типы
| класс | Key |
Статические публичные члены
| 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 очень удобен для сложных ключей, но QPixmapCache::Key API будет очень эффективным и удобным для однозначного сопоставления объект-пиксель — в этом случае вы можете хранить ключи как члены объекта.
Если в кэш вставлены два пикселя с одинаковыми ключами, последний пиксель заменит первый в кэше. Это соответствует поведению классов QHash и QCache.
Кэш становится полным, когда общий размер всех пиксем в кэше превышает cacheLimit(). Начальный размер кэша составляет 10240 КБ (10 МБ); вы можете изменить его, вызвав setCacheLimit() с требуемым значением. Пиксель занимает примерно (width * height * depth)/8 байт памяти.
Статья Optimizing with QPixmapCache в Qt Quarterly объясняет, как использовать QPixmapCache для ускорения приложений путём кэширования результатов рисования.
Примечание: QPixmapCache можно использовать только из основного потока приложения. Доступ из других потоков будет проигнорирован и вернёт ошибку.
Документация по членам-функциям
[static] int QPixmapCache::cacheLimit()
Возвращает размер кэша (в килобайтах).
По умолчанию размер кэша составляет 10240 КБ.
См. также setCacheLimit().
[static] void QPixmapCache::clear()
Удаляет все пиксели из кэша.
[static] bool QPixmapCache::find(const QString &key, QPixmap *pixmap)
Ищет кэшированный пиксель, связанный с заданным ключом key в кэше. Если пиксель найден, функция устанавливает 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);
[static] bool QPixmapCache::find(const QPixmapCache::Key &key, QPixmap *pixmap)
Ищет кэшированный пиксель, связанный с заданным ключом key в кэше. Если пиксель найден, функция устанавливает pixmap на этот пиксель и возвращает true; в противном случае оставляет pixmap без изменений и возвращает false. Если пиксель не найден, это означает, что key больше недействителен, поэтому он будет освобождён для следующей вставки.
[static] bool QPixmapCache::insert(const QString &key, const QPixmap &pixmap)
Вставляет копию пикселя pixmap, связанного с ключом key, в кэш.
Все пиксели, вставленные библиотекой Qt, имеют ключ, начинающийся с «$qt», поэтому собственные ключи пикселей никогда не должны начинаться с «$qt».
Когда пиксель вставляется, а кэш собирается превысить свой предел, он удаляет пиксели до тех пор, пока не будет достаточно места для вставки пикселя.
Самые старые пиксели (менее недавно использовавшиеся в кэше) удаляются при необходимости большего места.
Функция возвращает true если объект был вставлен в кэш; в противном случае возвращает false.
См. также setCacheLimit().
[static] QPixmapCache::Key QPixmapCache::insert(const QPixmap &pixmap)
Вставляет копию заданного pixmap в кэш и возвращает ключ, который можно использовать для его извлечения.
Когда пиксель вставляется, а кэш собирается превысить свой предел, он удаляет пиксели до тех пор, пока не будет достаточно места для вставки пикселя.
Самые старые пиксели (менее недавно использовавшиеся в кэше) удаляются при необходимости большего места.
См. также setCacheLimit() и replace().
[static] void QPixmapCache::remove(const QString &key)
Удаляет пиксель, связанный с ключом key, из кэша.
[static] void QPixmapCache::remove(const QPixmapCache::Key &key)
Удаляет пиксель, связанный с ключом key, из кэша и освобождает ключ для будущей вставки.
[static] bool QPixmapCache::replace(const QPixmapCache::Key &key, const QPixmap &pixmap)
Заменяет пиксель, связанный с данным ключом key, на указанный pixmap. Возвращает true если pixmap был корректно вставлен в кэш; в противном случае возвращает false.
См. также 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-6.0/qpixmapcache.html