Класс QResource
Класс QResource предоставляет интерфейс для прямого чтения из ресурсов. Подробнее...
| Заголовок: | #include <QResource> |
| qmake: | QT += core |
| С момента: | Qt 4.2 |
Этот класс был представлен в Qt 4.2.
Примечание: Все функции в этом классе являются перевходными.
Типы
| перечисление | Compression { NoCompression, ZlibCompression, ZstdCompression } |
Общедоступные функции
| 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 | isCompressed() const |
| bool | isValid() const |
| QDateTime | lastModified() const |
| QLocale | locale() const |
| void | setFileName(const QString &file) |
| void | setLocale(const QLocale &locale) |
| qint64 | size() const |
Статические общедоступные члены
| 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 |
Содержимое не сжато (isCompressed() равно false). |
QResource::ZlibCompression |
1 |
Содержимое сжато с использованием https://zlib.net и может быть распаковано с помощью функции qUncompress(). |
QResource::ZstdCompression |
2 |
Содержимое сжато с использованием https://zstd.net. Для распаковки используйте функцию ZSTD_decompress из библиотеки zstd. |
Это перечисление было введено или изменено в Qt 5.13.
См. также compressionAlgorithm() и isCompressed().
Документация по функциям-членам
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 isCompressed(), data(), isFile()
Эта функция была добавлена в Qt 5.13.
const uchar *QResource::data() const
Возвращает прямой доступ к неизменяемому сегменту данных, который представляет этот ресурс. Если ресурс сжат, возвращаемые данные сжаты, и для доступа к данным необходимо использовать qUncompress(). Если ресурс является каталогом nullptr возвращается.
См. также size(), isCompressed() и isFile().
QString QResource::fileName() const
Возвращает полный путь к файлу, который представляет этот QResource, как он был передан.
См. также setFileName() и absoluteFilePath().
bool QResource::isCompressed() const
Возвращает true , если ресурс представляет собой файл, и данные, лежащие в его основе, находятся в сжатом формате, в противном случае — false. Если данные сжаты, проверьте compressionAlgorithm(), чтобы определить, какой алгоритм использовать для их разархивирования.
См. также data(), compressionAlgorithm() и isFile().
[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
Возвращает дату и время последнего изменения файла перед упаковкой в ресурс.
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
Возвращает размер данных, лежащих в основе ресурса.
[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.13/qresource.html