Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Запутался с параметрами в макросах QtPlugin 
:(
    Опции темы
NoNo
Дата 2.11.2009, 15:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 109
Регистрация: 14.11.2006

Репутация: нет
Всего: нет



Разбираясь с плагинами ..... озадачился вот че....
Например про макрос Q_DECLARE_INTERFACE() в книжке Шлея написано что этот макрос должен иметь два параметра: первый - имя класса интерфейса, второй - строка идентификатора........
Строка идентификатора должна состоять из: домена создателя; имени приложения; имени интерфейса; номера версии. Но программа хорошо компилируется если опустить любой параметр (например имя приложения) или даже если строка идентификатора = ""(пустой строке) так для чего же нужна это строка и какие насамом деле параметры для неё важны и зачем???

Также не разобрался с макросом Q_EXPORT_PLUGIN2(PluginName, ClassName)....
Второй параметр верно, должен быть именем класса расширения, но вот первым параметров можно указывать что угодно (произвольную строку) и тоже всё нормально компилится и работает.....а ещё чем отличается этот макрос от макроса Q_EXPORT_PLUGIN (ClassName), я и его подставлял всё вроде бы работает.....хотелось бы знать в чём отличие.....и для чего применять....
Ну и последний макрос... как я понимаю противоположность Q_EXPORT_PLUGIN() макрос Q_EXPORT_PLUGIN (ClassName)  что это и куда его засовывать.......пример если можно????

Так же если можно подскажите как можно задавать сигналы и слоты в расширениях.....т.е. если допустим я хочу отправлять сигнал с одного плагина а принимать этот сигнал другим.......у меня есть одна идея правда я щас только собираюсь попробовать....выглядит  
она примерно так......сигналы я объявляю в интерфейсе.....а вот слоты можно объявить как чисто виртуальные в том же интерфейсе (но как я слышал виртуальные слоты работают медленнее) думаю можно ещё объявить слот в интерфейсе и определить его там же..... Если кто то знает конкретное решение этой проблемы пожалуйста поделитесь........
PM MAIL   Вверх
SABROG
Дата 2.11.2009, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 81
Всего: 91



Цитата(NoNo @  2.11.2009,  15:48 Найти цитируемый пост)
Но программа хорошо компилируется если опустить любой параметр (например имя приложения) или даже если строка идентификатора = ""(пустой строке) так для чего же нужна это строка и какие насамом деле параметры для неё важны и зачем???

Это вы батенька лукавите:

Код

error: '*' cannot appear in a constant-expression
error: parse error in template argument list
error: ISO C++ forbids declaration of 'qobject_cast' with no type


Код

error: expected initializer before '*' token


Попробуй сделать make clean и пересобрать проект еще раз.


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
NoNo
Дата 2.11.2009, 17:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 109
Регистрация: 14.11.2006

Репутация: нет
Всего: нет



Цитата(SABROG @  2.11.2009,  17:06 Найти цитируемый пост)
Это вы батенька лукавите:


Либо я что то путаю......но вот какая строка у меня в интерфейсе присутствует и всё работает......
Q_DECLARE_INTERFACE(StringInterface,"")

Давай я выложу проект а ты сам попробуй откомпилить всё у себя....... только в этом проекте очень много лишнего и ненужного на это внимание не обращай, это я эксперементирую.

после того как откомпилируешь MyPlugin создавшуюся папку plugins скопируй в папку с приложением

Присоединённый файл ( Кол-во скачиваний: 1 )
Присоединённый файл  programming.rar 2,78 Kb
PM MAIL   Вверх
SABROG
Дата 2.11.2009, 17:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 81
Всего: 91



Так я опускал первый параметр, как ты и написал... Второй параметр на компиляцию не влияет.

Это сообщение отредактировал(а) SABROG - 2.11.2009, 17:34


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
NoNo
Дата 2.11.2009, 17:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 109
Регистрация: 14.11.2006

Репутация: нет
Всего: нет



Цитата(SABROG @  2.11.2009,  17:32 Найти цитируемый пост)
Так я опускал первый параметр, как ты и написал... Второй параметр на компиляцию не влияет.



Первый параметр?????
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.....но и без неё всё работает.....и как она так завязана тогда
PM MAIL   Вверх
SABROG
Дата 2.11.2009, 18:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 81
Всего: 91



Цитата(NoNo @  2.11.2009,  17:58 Найти цитируемый пост)
Вообще для чего эта строка нужна...


Цитата

The second argument is a string identifying the interface in a unique way. By convention, we use a "Java package name" syntax to identify interfaces. If we later change the interfaces, we must use a different string to identify the new interface; otherwise, the application might crash. It is therefore a good idea to include a version number in the string, as we did above.

Это что-то типа уникальной строки, говорящей о версии плагина, как GUID, но в стиле Java. Каждый новый интерфейс для плагина, например "квадратик", "точка", "звездочка" для плагина типа "картинка" должен иметь свой уникальный GUID. Нужен он для двух вещей, чтобы не пересекались плагины с одинаковыми названиями, но от разных разработчиков, и чтобы программа могла определять какую именно версию плагина нужно использовать. Все это для того, чтобы программа не падала и корректно работала с множеством интерфейсов и плагинов, а не только с одним.

Это сообщение отредактировал(а) SABROG - 2.11.2009, 18:30


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
NoNo
Дата 3.11.2009, 10:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 109
Регистрация: 14.11.2006

Репутация: нет
Всего: нет



тогда получается задание параметров этого идентификатора не строгое..... т.е. вот как она по Шлее "имя домена. имя приложения. имя интерфейса/ версия" 
я же могу получается опустить например имя домена (так как например у меня нет такого имени) например "имя приложения.имя интерфейса/номер версии" Да, и кстати получается знак "/" - это отличительны знак номера версии, или как он туда попал 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.0457 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.