Russian Qt Forum
Ноябрь 24, 2024, 05:32 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Работа с ресурсными файлами  (Прочитано 7392 раз)
rudolfninja
Гость
« : Апрель 10, 2014, 12:39 »

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

Сообщений: 4350



Просмотр профиля
« Ответ #1 : Апрель 10, 2014, 12:46 »

Запакуйте все картинки в архив и доставайте их оттуда. Решений для этого вагон и маленькая тележка.
Начните смотреть с QuaZIP: http://quazip.sourceforge.net/
Записан
OKTA
Гость
« Ответ #2 : Апрель 10, 2014, 12:58 »

Понятное дело не компилируется, т.к. файл ты удалил, а в qrc он остался прописан.
А что не получилось сделать? создаешь файл ресурсов, добавляешь его в .pro, пихаешь туда картинки свои и компилишь => все картинки впихнутся в .exe
Записан
break
Гипер активный житель
*****
Offline Offline

Сообщений: 846


Просмотр профиля
« Ответ #3 : Апрель 10, 2014, 12:58 »

Цитировать
Сделал так, как тут написано. Но если удалить картинку из папки, то программа потом не компилируется. Там написано, что с помощью rcc можно как-то сделать бинарный файл с рисунками и тянуть их оттуда (тогда, как я понимаю, не придется хранить все картинки на диске).
Правильно компилироваться не будет. И картинки надо хранить на диске вместе с исходниками. Но выполняемой программе они уже не нужны т.к. будут храниться в ресурсах, а обращение к ним из ресурсов надо начинать с двоеточия в имени файла. Это все штатными средствами QT-ресурсов делается.
Записан
Swa
Самовар
**
Offline Offline

Сообщений: 170


Просмотр профиля
« Ответ #4 : Апрель 10, 2014, 12:59 »

Но если удалить картинку из папки, то программа потом не компилируется.
А зачем вы удаляете картинку? Не удаляйте её. Пусть все эти картинки лежат в вашей папке проекта. При компиляции они будут встроены в exe файл.
Записан
rudolfninja
Гость
« Ответ #5 : Апрель 10, 2014, 13:12 »

Я видимо, неправильно выразился.
Мне надо чтоб вместе с программой не шли все картинки, т.к. пользователь может, например, заменить одну картинку, а это повлияет на ui.
Мне надо хранить все картинки в каком-то файле, в котором пользователь не сможет их поменять. А потом, по мере необходимости, тянуть картинки из файла.
С помощью чего это реализовать?
Записан
Swa
Самовар
**
Offline Offline

Сообщений: 170


Просмотр профиля
« Ответ #6 : Апрель 10, 2014, 13:13 »

Товарищ rudolfninja, вы читаете то, что вам пишут?
При компиляции эти картинки будут встроены в exe файл.
Записан
rudolfninja
Гость
« Ответ #7 : Апрель 10, 2014, 13:15 »

Да, хотел дописать по этому поводу, но уже не успел изменить сообщение. Напишу в этом.
Это повлияет на размер exe файла. Ну и, наверное, нехорошо пихать все в один exe. Хотелось бы, чтобы "суп отдельно, мухи отдельно".
Записан
Swa
Самовар
**
Offline Offline

Сообщений: 170


Просмотр профиля
« Ответ #8 : Апрель 10, 2014, 13:36 »

Если хотите отдельно, то пакуйте картинки в zip, но тогда будьте готовы к тому, что zip файл может быть удален пользователем или изменён.
Записан
panAlexey
Гипер активный житель
*****
Offline Offline

Сообщений: 864

Акцио ЗАРПЛАТА!!!!! :(


Просмотр профиля
« Ответ #9 : Апрель 10, 2014, 13:44 »

Да, хотел дописать по этому поводу, но уже не успел изменить сообщение. Напишу в этом.
Это повлияет на размер exe файла. Ну и, наверное, нехорошо пихать все в один exe. Хотелось бы, чтобы "суп отдельно, мухи отдельно".
пихни в библиотеку.
Записан

Win Xp SP-2, Qt4.3.4/MinGW. http://trdm.1gb.ru/
rudolfninja
Гость
« Ответ #10 : Апрель 10, 2014, 13:58 »

Если запихнуть в dll, то потеряется кроссплатформенность.
Буду, наверное, все таки, в .exe их оставлять.
Спасибо всем.
Записан
rudolfninja
Гость
« Ответ #11 : Апрель 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? Только, желательно, максимально подробно.
Записан
OKTA
Гость
« Ответ #12 : Апрель 10, 2014, 14:22 »

А чем qrc не устроил?
Записан
rudolfninja
Гость
« Ответ #13 : Апрель 10, 2014, 14:41 »

qrc не подключишь динамически.
Разобрался с rcc.
Всем, кто ответил, спасибо.
Записан
break
Гипер активный житель
*****
Offline Offline

Сообщений: 846


Просмотр профиля
« Ответ #14 : Апрель 10, 2014, 14:47 »

Цитировать
Если запихнуть в dll, то потеряется кроссплатформенность.
Да ну ! Скомпилится либа в винде в ДЛЛ, в Линукс в СО - и никак кроссплатформенность не потеряется!
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.116 секунд. Запросов: 23.