Как отобразить файл ресурсов в Qt?
-
05-07-2019 - |
Вопрос
Можно ли отобразить файл ресурсов в Qt?
Например:
QFile file(resource_name);
file.open(QIODevice::ReadOnly);
uchar* ptr = file.map(0, file.size());
Когда я пытаюсь это сделать, ptr == 0 , что указывает на ошибку.
Это нормально работает, если я пытаюсь отобразить обычный файл.
Я использую Qt в linux, который поддерживает QFile :: Map
.
Решение
Да, это возможно. Есть одна вещь, которую нужно иметь в виду, хотя. По умолчанию компилятор ресурсов qt rcc сжимает ресурсы. Р>
Вызов file.size () вернет фактический несжатый размер исходного файла. Однако встроенный ресурс сжат и, скорее всего, имеет другой размер. File.map (0, file.size ()) возвращает ошибку, так как размер, передаваемый в map (), больше сопоставляемого ресурса. Даже если вы передадите правильный размер в map () или меньший размер, память будет содержать сжатые данные, а не несжатые данные.
Решение состоит в том, чтобы не сжимать встроенный ресурс. Это может быть достигнуто путем добавления:
QMAKE_RESOURCE_FLAGS += -no-compress
в ваш файл проекта qt. См. здесь для объяснения QMAKE_RESOURCE_FLAGS. р>