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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Два плагина, один пиксмап  (Прочитано 6702 раз)
QCasper
Гость
« : Февраль 27, 2007, 15:45 »

Есть два плагина. Интерфейс обоих поддерживает метод QPixmap icon(); В обоих плагинах он осуществлен как return QPixmap(":icon.png"); Плагины компилируются и собираются в разных каталогах, картинки соотвественно лежат рядом и они разные. Почему когда я загружаю эти плагины, и вешаю иконку, скажем на кнопку (иконку первого на одну кнопку, иконку второго на другую), то на обеих кнопках вижу иконку того плагина, который загрузился раньше? Проходился отладчиком, смотрел адреса непосредствено перед setIcon() - адреса разные. Что за лажа...
Да, если сделать имена разные return QPixmap(":icon.png"); return QPixmap(":icon1.png"); то все нормально. Что же там происходит?
Записан
Dendy
Гость
« Ответ #1 : Февраль 27, 2007, 16:45 »

Потому что в списке ресурсов один файл с таким именем. Имена ресурсов разделяемые в пределах всего приложения, а не для каждого плагина в отдельности. Нужно делать разные алиасы или грузить не из системы ресурсов Qt.
Записан
QCasper
Гость
« Ответ #2 : Февраль 27, 2007, 17:54 »

Цитата: "Dendy"
Потому что в списке ресурсов один файл с таким именем. Имена ресурсов разделяемые в пределах всего приложения, а не для каждого плагина в отдельности. Нужно делать разные алиасы или грузить не из системы ресурсов Qt.


1) Что значит разные алиасы?
2) Как можно грузить, если не из системы ресурсов Qt?
Записан
Dendy
Гость
« Ответ #3 : Февраль 27, 2007, 18:27 »

Что-то типа:

Код:
<file alias="firstplugin-icon.png">firstplugin/icon.png</file>
<file alias="secondplugin-icon.png">secondplugin/icon.png</file>
Записан
QCasper
Гость
« Ответ #4 : Февраль 27, 2007, 21:16 »

Цитата: "Dendy"
Что-то типа:

Код:
<file alias="firstplugin-icon.png">firstplugin/icon.png</file>
<file alias="secondplugin-icon.png">secondplugin/icon.png</file>


Хм... должны же быть какие то другие методы. Вот надо будет стороннему разработчику склепать плагин, и ему надо знать весь список алиасов, для того чтобы сгенерить уникальный?
Записан
Lion
Гость
« Ответ #5 : Февраль 27, 2007, 21:34 »

Цитата: "QCasper"
Цитата: "Dendy"
Что-то типа:

Код:
<file alias="firstplugin-icon.png">firstplugin/icon.png</file>
<file alias="secondplugin-icon.png">secondplugin/icon.png</file>


Хм... должны же быть какие то другие методы. Вот надо будет стороннему разработчику склепать плагин, и ему надо знать весь список алиасов, для того чтобы сгенерить уникальный?

Храни иконки не в ресурсах, а на диске.
Записан
QCasper
Гость
« Ответ #6 : Февраль 27, 2007, 21:36 »

Цитата: "Lion"
Храни иконки не в ресурсах, а на диске.
И всю эту прорву иконок с собой везде таскать? Че-то не прикольно...
Записан
zabivator
Гость
« Ответ #7 : Март 01, 2007, 09:15 »

Завести метод в плагине что-то типа QString ResourcePath() const и возвращать разные пути в разных плагинах
Записан
QCasper
Гость
« Ответ #8 : Март 01, 2007, 12:24 »

Цитата: "zabivator"
Завести метод в плагине что-то типа QString ResourcePath() const и возвращать разные пути в разных плагинах


С таким же успехом можно и иконки по разному называть...
Записан
Lion
Гость
« Ответ #9 : Март 01, 2007, 20:42 »

Цитата: "QCasper"
Цитата: "Lion"
Храни иконки не в ресурсах, а на диске.
И всю эту прорву иконок с собой везде таскать? Че-то не прикольно...

Не понял в чем проблема, иконки можно в отдельный каталог запихать или вообще хранить их в zip файле, и обращаться к ним через zlib+minizip, могу кинуть пару готовых классов.
Записан
QCasper
Гость
« Ответ #10 : Март 01, 2007, 21:37 »

Цитата: "Lion"
Цитата: "QCasper"
Цитата: "Lion"
Храни иконки не в ресурсах, а на диске.
И всю эту прорву иконок с собой везде таскать? Че-то не прикольно...

Не понял в чем проблема, иконки можно в отдельный каталог запихать или вообще хранить их в zip файле, и обращаться к ним через zlib+minizip, могу кинуть пару готовых классов.


Проблема вот в чем. У меня в основном каталоге приложения есть каталог plugins. Там лежат плагины. Теперь представьте себе такую вещь. 5 разработчиков решили разработать плагины для этой проги. И чтобы все прошло гладко, им надо договориться о том, какие названия будут у иконок, дабы не позатирать друг друга. Ввиду того, еще раз повторяю, что плагины лежат в одном каталоге.
Записан
Dendy
Гость
« Ответ #11 : Март 02, 2007, 15:50 »

Отлично. Договориваетесь, что файлы будут лежать в виртуальных каталогах, например так:

Код:
:/resources/plugins/<pluginId>/images
:/resources/plugins/<pluginId>/other
Записан
QCasper
Гость
« Ответ #12 : Март 02, 2007, 15:52 »

Цитата: "Dendy"
Отлично. Договориваетесь, что файлы будут лежать в виртуальных каталогах, например так:

Код:
:/resources/plugins/<pluginId>/images
:/resources/plugins/<pluginId>/other


Да вот в том то и дело... что договариваться не охота. Хочется назвал как захотел, и нет проблем.
Записан
Dendy
Гость
« Ответ #13 : Март 02, 2007, 18:05 »

Извините, но локальная файловая система всё равно одна. Допустим все файлы можно хранить в корне программы. Так как их назвать, чтобы разные модули использовали разные файлы? Очевидно что нужны разные пути к файлам.

Проблема в том, что и локальная и виртуальная файловые системы - разделяемые ресурсы между всем приложением. Так что для решения задачи Вам нужно пересмотреть подход к системе ресурсов.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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