Вопрос

Можно ли отобразить файл ресурсов в 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top