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