Как отобразить файл ресурсов в Qt? - PullRequest
3 голосов
/ 30 июля 2009

Возможно ли отобразить файл ресурсов в Qt?

Например:

QFile file(resource_name);
file.open(QIODevice::ReadOnly);

uchar* ptr = file.map(0, file.size());

Когда я пытаюсь это сделать, ptr == 0 , указывая на ошибку.
Работает нормально, если я пытаюсь отобразить обычный файл.

Я использую Qt в linux, который поддерживает QFile::Map.

1 Ответ

3 голосов
/ 30 июля 2009

Да, это возможно. Есть одна вещь, которую нужно иметь в виду, хотя. По умолчанию компилятор ресурсов qt rcc сжимает ресурсы.

Вызов file.size () вернет фактический, несжатый размер исходного файла. Однако встроенный ресурс сжат и, скорее всего, имеет другой размер. File.map (0, file.size ()) возвращает ошибку, так как размер, передаваемый в map (), больше сопоставляемого ресурса. Даже если вы передадите правильный размер в map () или меньший размер, память будет содержать сжатые данные, а не несжатые.

Решение состоит в том, чтобы не сжимать встроенный ресурс. Это может быть достигнуто путем добавления:

QMAKE_RESOURCE_FLAGS += -no-compress  

в ваш файл проекта qt. Смотрите здесь для объяснения QMAKE_RESOURCE_FLAGS.

...