Класс QResource
Класс QResource предоставляет интерфейс для прямого чтения из ресурсов. Подробнее...
| Заголовок: | #include <QResource> |
| qmake: | QT += core |
| С момента: | Qt 4.2 |
Этот класс был представлен в Qt 4.2.
Примечание: Все функции в этом классе являются перевходными.
Типы public
| перечисление | Compression { NoCompression, ZlibCompression, ZstdCompression } |
Функции public
| QResource(const QString &file = QString(), const QLocale &locale = QLocale()) | |
| ~QResource() | |
| QString | absoluteFilePath() const |
| QResource::Compression | compressionAlgorithm() const |
| const uchar * | data() const |
| QString | fileName() const |
| bool | isValid() const |
| QDateTime | lastModified() const |
| QLocale | locale() const |
| void | setFileName(const QString &file) |
| void | setLocale(const QLocale &locale) |
| qint64 | size() const |
| QByteArray | uncompressedData() const |
| qint64 | uncompressedSize() const |
Статические public члены
| bool | registerResource(const QString &rccFileName, const QString &mapRoot = QString()) |
| bool | registerResource(const uchar *rccData, const QString &mapRoot = QString()) |
| bool | unregisterResource(const QString &rccFileName, const QString &mapRoot = QString()) |
| bool | unregisterResource(const uchar *rccData, const QString &mapRoot = QString()) |
Защищённые функции
| QStringList | children() const |
| bool | isDir() const |
| bool | isFile() const |
Подробное описание
QResource — это объект, представляющий набор данных (и, возможно, подкаталоги) по одному ресурсу. QResource обеспечивает прямой доступ к байтам в их исходном формате. Такой прямой доступ позволяет читать данные без копирования буферов или косвенного обращения. Косвенное обращение часто полезно при взаимодействии с ресурсом так, как будто это файл, это можно достичь с помощью QFile. Данные и подкаталоги, лежащие в основе QResource, обычно компилируются в приложение/библиотеку, но также можно загрузить ресурс во время выполнения. При загрузке во время выполнения файл ресурса загружается как один большой набор данных, а затем выдаётся частями с помощью ссылок в древе ресурсов.
QResource может быть загружен с абсолютным путём, или обработан как корень файловой системы с символом /, или в нотации ресурсов, укоренённый с символом :. Также можно открыть относительный ресурс, который будет найден в списке путей, возвращаемых QDir::searchPaths().
QResource, представляющий файл, будет иметь данные, его поддерживающие. Эти данные могут быть сжатыми, в таком случае для доступа к реальным данным необходимо использовать qUncompress(); это происходит неявно при доступе через QFile. QResource, представляющий каталог, будет иметь только подкаталоги и не будет иметь данных.
Динамическая загрузка ресурсов
Ресурс может быть исключен из двоичного файла приложения и загружен по мере необходимости во время выполнения, используя функцию registerResource(). Файл ресурса, передаваемый в registerResource(), должен быть двоичным ресурсом, созданным инструментом rcc. Дополнительную информацию о двоичных ресурсах можно найти в документации Система ресурсов Qt.
Это часто полезно при загрузке большого набора значков приложения, которые могут изменяться в зависимости от настроек или которые могут редактироваться пользователем, а затем повторно создаваться. Ресурс сразу же загружается в память, либо в результате одной операции чтения файла, либо в виде отображённого в памяти файла.
Этот подход может обеспечить значительное повышение производительности, так как будет загружен только один файл, а части данных будут выдаваться по запрошенному пути в setFileName().
Функция unregisterResource() удаляет ссылку на определённый файл. Если существуют объекты QResource, которые в настоящее время ссылаются на ресурсы, связанные с незарегистрированным файлом, они останутся валидными, но сам файл ресурса будет удалён из корней ресурсов, и поэтому больше не смогут быть созданы QResource, указывающие на эти данные ресурса. Сам ресурс будет выгружен из памяти, когда последний QResource, указывающий на него, будет уничтожен.
См. также Система ресурсов Qt, QFile, QDir и QFileInfo.
Документация по типам членов
перечисление QResource::Compression
Это перечисление используется функцией compressionAlgorithm() для указания алгоритма, использованного инструментом RCC для сжатия полезной нагрузки.
| Постоянная | Значение | Описание |
|---|---|---|
QResource::NoCompression |
0 |
Содержимое не сжато |
QResource::ZlibCompression |
1 |
Содержимое сжато с помощью zlib и может быть распаковано с помощью функции qUncompress(). |
QResource::ZstdCompression |
2 |
Содержимое сжато с помощью zstd. Для распаковки используйте функцию ZSTD_decompress из библиотеки zstd. |
Это перечисление было добавлено или изменено в Qt 5.13.
См. также compressionAlgorithm().
Документация по функциям-членам
QResource::QResource(const QString &file = QString(), const QLocale &locale = QLocale())
Конструирует QResource, указывающий на file. locale используется для загрузки конкретной локализации данных ресурса.
См. также QFileInfo, QDir::searchPaths(), setFileName() и setLocale().
QResource::~QResource()
Освобождает ресурсы объекта QResource.
QString QResource::absoluteFilePath() const
Возвращает реальный путь, который представляет данный QResource, если ресурс был найден с помощью QDir::searchPaths(), он будет указан в пути.
См. также fileName().
QStringList QResource::children() const
Возвращает список всех ресурсов в этом каталоге, если ресурс представляет собой файл, список будет пустым.
См. также isDir().
QResource::Compression QResource::compressionAlgorithm() const
Возвращает тип сжатия, с которым сжат данный ресурс, если таковой имеется. Если ресурс не сжат, эта функция возвращает QResource::NoCompression.
Если эта функция возвращает QResource::ZlibCompression, вы можете распаковать данные, используя функцию qUncompress(). До Qt 5.13 это был единственный поддерживаемый алгоритм сжатия.
Если эта функция возвращает QResource::ZstdCompression, вам необходимо использовать функции библиотеки Zstandard (<zstd.h> header). Qt does not provide a wrapper. See \l{http://facebook.github.io/zstd/zstd_manual.html}{Zstandard manual}. \sa data(), isFile()
Данная функция была добавлена в Qt 5.13.
const uchar *QResource::data() const
Возвращает прямой доступ к сегменту данных для чтения, которые представляет данный ресурс. Если ресурс сжат, возвращаемые данные также будут сжатыми. Вызывающая сторона должна затем распаковать данные или использовать uncompressedData(). Если ресурс является каталогом, nullptr возвращается.
См. также uncompressedData(), size() и isFile().
QString QResource::fileName() const
Возвращает полный путь к файлу, который представляет данный QResource, как он был передан.
См. также setFileName() и absoluteFilePath().
[protected] bool QResource::isDir() const
Возвращает true, если ресурс представляет собой каталог и, следовательно, может иметь children() в нём, false, если он представляет собой файл.
См. также isFile().
[protected] bool QResource::isFile() const
Возвращает true, если ресурс представляет собой файл и, следовательно, имеет данные, false, если он представляет собой каталог.
См. также isDir().
bool QResource::isValid() const
Возвращает true, если ресурс действительно существует в иерархии ресурсов, в противном случае — false.
QDateTime QResource::lastModified() const
Возвращает дату и время последнего изменения файла до его упаковки в ресурс.
Данная функция была добавлена в Qt 5.8.
QLocale QResource::locale() const
Возвращает используемый язык, который использовался для поиска данных для данного QResource.
См. также setLocale().
[static] bool QResource::registerResource(const QString &rccFileName, const QString &mapRoot = QString())
Регистрирует ресурс с данным rccFileName в указанном месте в дереве ресурсов, заданном mapRoot, и возвращает true, если файл успешно открыт; в противном случае возвращает false.
См. также unregisterResource().
[static] bool QResource::registerResource(const uchar *rccData, const QString &mapRoot = QString())
Регистрирует ресурс с заданными rccData в указанном месте в дереве ресурсов, заданном mapRoot, и возвращает true, если файл успешно открыт; в противном случае возвращает false.
Предупреждение: Данные должны оставаться валидными в течение всего времени существования любого QFile, который может ссылаться на данные ресурса.
Данная функция была добавлена в Qt 4.3.
См. также unregisterResource().
void QResource::setFileName(const QString &file)
Устанавливает QResource для указания на файл file. file может быть абсолютным, в этом случае он открывается напрямую; если относительный, то поиск файла будет осуществляться в QDir::searchPaths().
См. также fileName() и absoluteFilePath().
void QResource::setLocale(const QLocale &locale)
Устанавливает QResource для загрузки локализации ресурса только для locale. Если ресурс для указанной локали не найден, то используется C-локаль.
См. также locale() и setFileName().
qint64 QResource::size() const
Возвращает размер хранимых данных, лежащих в основе ресурса.
Если ресурс сжат, эта функция возвращает размер сжатых данных. См. uncompressedSize() для размера не сжатых данных.
См. также data(), uncompressedSize() и isFile().
QByteArray QResource::uncompressedData() const
Возвращает данные ресурса, предварительно распаковывая их, если данные были сжаты. Если ресурс является каталогом или при распаковке произошла ошибка, возвращается пустой QByteArray.
Примечание: Если данные были сжаты, эта функция будет распаковывать их каждый раз при вызове. Результат не кешируется между вызовами.
Данная функция была добавлена в Qt 5.15.
См. также uncompressedSize(), size(), isCompressed() и isFile().
qint64 QResource::uncompressedSize() const
Возвращает размер данных в этом ресурсе. Если данные не сжаты, эта функция возвращает то же значение, что и size(). Если они сжаты, эта функция извлекает размер исходных несжатых данных из сохраненного потока.
Данная функция была добавлена в Qt 5.15.
См. также size(), uncompressedData() и isFile().
[static] bool QResource::unregisterResource(const QString &rccFileName, const QString &mapRoot = QString())
Удаляет регистрацию ресурса с заданным rccFileName в указанном месте в дереве ресурсов, заданном mapRoot, и возвращает true, если ресурс успешно загружен и не существует ссылок на него; в противном случае возвращает false.
См. также registerResource().
[static] bool QResource::unregisterResource(const uchar *rccData, const QString &mapRoot = QString())
Удаляет регистрацию ресурса с заданными rccData в указанном месте в дереве ресурсов, заданном mapRoot, и возвращает true, если ресурс успешно загружен и не существует ссылок на него; в противном случае возвращает false.
Данная функция была добавлена в Qt 4.3.
См. также registerResource().
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.15/qresource.html