Russian Qt Forum

Qt => Общие вопросы => Тема начата: QCasper от Февраль 27, 2007, 15:45



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


Название: Два плагина, один пиксмап
Отправлено: Dendy от Февраль 27, 2007, 16:45
Потому что в списке ресурсов один файл с таким именем. Имена ресурсов разделяемые в пределах всего приложения, а не для каждого плагина в отдельности. Нужно делать разные алиасы или грузить не из системы ресурсов Qt.


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


1) Что значит разные алиасы?
2) Как можно грузить, если не из системы ресурсов Qt?


Название: Два плагина, один пиксмап
Отправлено: Dendy от Февраль 27, 2007, 18:27
Что-то типа:

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


Название: Два плагина, один пиксмап
Отправлено: QCasper от Февраль 27, 2007, 21:16
Цитата: "Dendy"
Что-то типа:

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


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


Название: Два плагина, один пиксмап
Отправлено: Lion от Февраль 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 от Февраль 27, 2007, 21:36
Цитата: "Lion"
Храни иконки не в ресурсах, а на диске.
И всю эту прорву иконок с собой везде таскать? Че-то не прикольно...


Название: Два плагина, один пиксмап
Отправлено: zabivator от Март 01, 2007, 09:15
Завести метод в плагине что-то типа QString ResourcePath() const и возвращать разные пути в разных плагинах


Название: Два плагина, один пиксмап
Отправлено: QCasper от Март 01, 2007, 12:24
Цитата: "zabivator"
Завести метод в плагине что-то типа QString ResourcePath() const и возвращать разные пути в разных плагинах


С таким же успехом можно и иконки по разному называть...


Название: Два плагина, один пиксмап
Отправлено: Lion от Март 01, 2007, 20:42
Цитата: "QCasper"
Цитата: "Lion"
Храни иконки не в ресурсах, а на диске.
И всю эту прорву иконок с собой везде таскать? Че-то не прикольно...

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


Название: Два плагина, один пиксмап
Отправлено: QCasper от Март 01, 2007, 21:37
Цитата: "Lion"
Цитата: "QCasper"
Цитата: "Lion"
Храни иконки не в ресурсах, а на диске.
И всю эту прорву иконок с собой везде таскать? Че-то не прикольно...

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


Проблема вот в чем. У меня в основном каталоге приложения есть каталог plugins. Там лежат плагины. Теперь представьте себе такую вещь. 5 разработчиков решили разработать плагины для этой проги. И чтобы все прошло гладко, им надо договориться о том, какие названия будут у иконок, дабы не позатирать друг друга. Ввиду того, еще раз повторяю, что плагины лежат в одном каталоге.


Название: Два плагина, один пиксмап
Отправлено: Dendy от Март 02, 2007, 15:50
Отлично. Договориваетесь, что файлы будут лежать в виртуальных каталогах, например так:

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


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

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


Да вот в том то и дело... что договариваться не охота. Хочется назвал как захотел, и нет проблем.


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

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