![]() |
|
|
![]()
|
|
| NoNo |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 109 Регистрация: 14.11.2006 Репутация: нет Всего: нет |
Разбираясь с плагинами ..... озадачился вот че....
Например про макрос Q_DECLARE_INTERFACE() в книжке Шлея написано что этот макрос должен иметь два параметра: первый - имя класса интерфейса, второй - строка идентификатора........ Строка идентификатора должна состоять из: домена создателя; имени приложения; имени интерфейса; номера версии. Но программа хорошо компилируется если опустить любой параметр (например имя приложения) или даже если строка идентификатора = ""(пустой строке) так для чего же нужна это строка и какие насамом деле параметры для неё важны и зачем??? Также не разобрался с макросом Q_EXPORT_PLUGIN2(PluginName, ClassName).... Второй параметр верно, должен быть именем класса расширения, но вот первым параметров можно указывать что угодно (произвольную строку) и тоже всё нормально компилится и работает.....а ещё чем отличается этот макрос от макроса Q_EXPORT_PLUGIN (ClassName), я и его подставлял всё вроде бы работает.....хотелось бы знать в чём отличие.....и для чего применять.... Ну и последний макрос... как я понимаю противоположность Q_EXPORT_PLUGIN() макрос Q_EXPORT_PLUGIN (ClassName) что это и куда его засовывать.......пример если можно???? Так же если можно подскажите как можно задавать сигналы и слоты в расширениях.....т.е. если допустим я хочу отправлять сигнал с одного плагина а принимать этот сигнал другим.......у меня есть одна идея правда я щас только собираюсь попробовать....выглядит она примерно так......сигналы я объявляю в интерфейсе.....а вот слоты можно объявить как чисто виртуальные в том же интерфейсе (но как я слышал виртуальные слоты работают медленнее) думаю можно ещё объявить слот в интерфейсе и определить его там же..... Если кто то знает конкретное решение этой проблемы пожалуйста поделитесь........ |
|||
|
||||
| SABROG |
|
||||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: 81 Всего: 91 |
Это вы батенька лукавите:
Попробуй сделать make clean и пересобрать проект еще раз. |
||||
|
|||||
| NoNo |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 109 Регистрация: 14.11.2006 Репутация: нет Всего: нет |
Либо я что то путаю......но вот какая строка у меня в интерфейсе присутствует и всё работает...... Q_DECLARE_INTERFACE(StringInterface,"") Давай я выложу проект а ты сам попробуй откомпилить всё у себя....... только в этом проекте очень много лишнего и ненужного на это внимание не обращай, это я эксперементирую. после того как откомпилируешь MyPlugin создавшуюся папку plugins скопируй в папку с приложением Присоединённый файл ( Кол-во скачиваний: 1 )
programming.rar 2,78 Kb |
|||
|
||||
| SABROG |
|
|||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: 81 Всего: 91 |
Так я опускал первый параметр, как ты и написал... Второй параметр на компиляцию не влияет.
Это сообщение отредактировал(а) SABROG - 2.11.2009, 17:34 |
|||
|
||||
| NoNo |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 109 Регистрация: 14.11.2006 Репутация: нет Всего: нет |
Первый параметр????? Q_DECLARE_INTERFACE(StringInterface,"") StringInterface что ли???? Нет я не про него имел ввиду...... я как раз про второй и говорил...... т.е. допустим пример Q_DECLARE_INTERFACE(StringInterface,"com.soft.ApplicationName.InterfaceName/1.0") Вот в этой строке "com.soft.ApplicationName.InterfaceName/1.0" первый параметр - com.sof - имя домена второй параметр - ApplicationName - имя приложения третий параметр - InterfaceName - имя интерфейса\ ну и номер приложения.... Вот где я имел ввиду первый или второй параметр....... Вообще для чего эта строка нужна......якобы для MOC.....но и без неё всё работает.....и как она так завязана тогда |
|||
|
||||
| SABROG |
|
|||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: 81 Всего: 91 |
Это что-то типа уникальной строки, говорящей о версии плагина, как GUID, но в стиле Java. Каждый новый интерфейс для плагина, например "квадратик", "точка", "звездочка" для плагина типа "картинка" должен иметь свой уникальный GUID. Нужен он для двух вещей, чтобы не пересекались плагины с одинаковыми названиями, но от разных разработчиков, и чтобы программа могла определять какую именно версию плагина нужно использовать. Все это для того, чтобы программа не падала и корректно работала с множеством интерфейсов и плагинов, а не только с одним. Это сообщение отредактировал(а) SABROG - 2.11.2009, 18:30 |
|||
|
||||
| NoNo |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 109 Регистрация: 14.11.2006 Репутация: нет Всего: нет |
тогда получается задание параметров этого идентификатора не строгое..... т.е. вот как она по Шлее "имя домена. имя приложения. имя интерфейса/ версия"
я же могу получается опустить например имя домена (так как например у меня нет такого имени) например "имя приложения.имя интерфейса/номер версии" Да, и кстати получается знак "/" - это отличительны знак номера версии, или как он туда попал |
|||
|
||||
![]()
|
| Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |