Russian Qt Forum

Qt => Вопросы новичков => Тема начата: rudolfninja от Апрель 10, 2014, 12:39



Название: Работа с ресурсными файлами
Отправлено: rudolfninja от Апрель 10, 2014, 12:39
Добрый день.
Суть проблемы: есть много картинок, которые читаются с жесткого диска в момент выполнения программы. Выходит, что вместе с программой надо таскать все эти картинки, а это увеличивает объем программы на диске и может получится такое, что картинка случайно будет удалена.
Вопрос: как мне запихнуть все эти картинки в ресурсный файл и вместе 50 картинок в папке с программой держать только этот файл?
Читал про qrc тут: http://qt-project.org/doc/qt-5/resources.html
Сделал так, как тут написано. Но если удалить картинку из папки, то программа потом не компилируется. Там написано, что с помощью rcc можно как-то сделать бинарный файл с рисунками и тянуть их оттуда (тогда, как я понимаю, не придется хранить все картинки на диске). Но у меня через Qt Creator не вышло так сделать.
Подскажите, пожалуйста, как решить данную проблему?


Название: Re: Работа с ресурсными файлами
Отправлено: Old от Апрель 10, 2014, 12:46
Запакуйте все картинки в архив и доставайте их оттуда. Решений для этого вагон и маленькая тележка.
Начните смотреть с QuaZIP: http://quazip.sourceforge.net/


Название: Re: Работа с ресурсными файлами
Отправлено: OKTA от Апрель 10, 2014, 12:58
Понятное дело не компилируется, т.к. файл ты удалил, а в qrc он остался прописан.
А что не получилось сделать? создаешь файл ресурсов, добавляешь его в .pro, пихаешь туда картинки свои и компилишь => все картинки впихнутся в .exe


Название: Re: Работа с ресурсными файлами
Отправлено: break от Апрель 10, 2014, 12:58
Цитировать
Сделал так, как тут написано. Но если удалить картинку из папки, то программа потом не компилируется. Там написано, что с помощью rcc можно как-то сделать бинарный файл с рисунками и тянуть их оттуда (тогда, как я понимаю, не придется хранить все картинки на диске).
Правильно компилироваться не будет. И картинки надо хранить на диске вместе с исходниками. Но выполняемой программе они уже не нужны т.к. будут храниться в ресурсах, а обращение к ним из ресурсов надо начинать с двоеточия в имени файла. Это все штатными средствами QT-ресурсов делается.


Название: Re: Работа с ресурсными файлами
Отправлено: Swa от Апрель 10, 2014, 12:59
Но если удалить картинку из папки, то программа потом не компилируется.
А зачем вы удаляете картинку? Не удаляйте её. Пусть все эти картинки лежат в вашей папке проекта. При компиляции они будут встроены в exe файл.


Название: Re: Работа с ресурсными файлами
Отправлено: rudolfninja от Апрель 10, 2014, 13:12
Я видимо, неправильно выразился.
Мне надо чтоб вместе с программой не шли все картинки, т.к. пользователь может, например, заменить одну картинку, а это повлияет на ui.
Мне надо хранить все картинки в каком-то файле, в котором пользователь не сможет их поменять. А потом, по мере необходимости, тянуть картинки из файла.
С помощью чего это реализовать?


Название: Re: Работа с ресурсными файлами
Отправлено: Swa от Апрель 10, 2014, 13:13
Товарищ rudolfninja, вы читаете то, что вам пишут?
При компиляции эти картинки будут встроены в exe файл.


Название: Re: Работа с ресурсными файлами
Отправлено: rudolfninja от Апрель 10, 2014, 13:15
Да, хотел дописать по этому поводу, но уже не успел изменить сообщение. Напишу в этом.
Это повлияет на размер exe файла. Ну и, наверное, нехорошо пихать все в один exe. Хотелось бы, чтобы "суп отдельно, мухи отдельно".


Название: Re: Работа с ресурсными файлами
Отправлено: Swa от Апрель 10, 2014, 13:36
Если хотите отдельно, то пакуйте картинки в zip, но тогда будьте готовы к тому, что zip файл может быть удален пользователем или изменён.


Название: Re: Работа с ресурсными файлами
Отправлено: panAlexey от Апрель 10, 2014, 13:44
Да, хотел дописать по этому поводу, но уже не успел изменить сообщение. Напишу в этом.
Это повлияет на размер exe файла. Ну и, наверное, нехорошо пихать все в один exe. Хотелось бы, чтобы "суп отдельно, мухи отдельно".
пихни в библиотеку.


Название: Re: Работа с ресурсными файлами
Отправлено: rudolfninja от Апрель 10, 2014, 13:58
Если запихнуть в dll, то потеряется кроссплатформенность.
Буду, наверное, все таки, в .exe их оставлять.
Спасибо всем.


Название: Re: Работа с ресурсными файлами
Отправлено: rudolfninja от Апрель 10, 2014, 14:08
По ссылке, что я дал в первом посте, написано:
Цитировать
External Binary Resources
For an external binary resource to be created you must create the resource data (commonly given the .rcc extension) by passing the -binary switch to rcc. Once the binary resource is created you can register the resource with the QResource API.
For example, a set of resource data specified in a .qrc file can be compiled in the following way:
rcc -binary myresource.qrc -o myresource.rcc
In the application, this resource would be registered with code like this:
QResource::registerResource("/path/to/myresource.rcc");

Как мне в Qt Creator сделать подобное? Создать qrc файл у меня получилось. А вот сделать из него rcc - нет. Не подскажете как сделать rcc из qrc? Только, желательно, максимально подробно.


Название: Re: Работа с ресурсными файлами
Отправлено: OKTA от Апрель 10, 2014, 14:22
А чем qrc не устроил?


Название: Re: Работа с ресурсными файлами
Отправлено: rudolfninja от Апрель 10, 2014, 14:41
qrc не подключишь динамически.
Разобрался с rcc.
Всем, кто ответил, спасибо.


Название: Re: Работа с ресурсными файлами
Отправлено: break от Апрель 10, 2014, 14:47
Цитировать
Если запихнуть в dll, то потеряется кроссплатформенность.
Да ну ! Скомпилится либа в винде в ДЛЛ, в Линукс в СО - и никак кроссплатформенность не потеряется!