сигналы и слоты, передача указателя на мой объект |
Здравствуйте, гость ( Вход | Регистрация )
сигналы и слоты, передача указателя на мой объект |
ieroglif |
31.1.2009, 15:54
Сообщение
#1
|
Студент Группа: Новичок Сообщений: 17 Регистрация: 19.1.2009 Из: планета Земля Пользователь №: 496 Спасибо сказали: 0 раз(а) Репутация: 0 |
ситуация:
имеется ядро, которое подключает к себе кучу самых разных модулей (реализованных в виде шаред библиотек). модули хотят друг с другом общаться. у всех имеется единый интерфейс (логично) от которого они наследуются и по которому они и подгружаются. но конкретная реализация каждого модуля своя. (что, в целом, тоже логично) пример: модуль который отображает значок и меню в трее и модуль игры нарды. не факт что модуль нардов будет, и не факт, что будет модуль трея - это зависит от конкретной установки. но хочется, что бы если они присутсвували оба - модуль "нарды" докидывал в меню трея кнопку "играть в нарды". на данный момент реализация модульного интерфейса такая:
и на данный момент алгоритм вижу следующий: 1. загружаются модули 2. при загрузке они соединяют слоты сигналы sendCommand - getCommand с ядром в обе стороны. Ядро же на какие-то комманды (типа выход) реагирует, а вообще принятый сигнал перекидывает всем модулям, которые уже разбирают на какие комманды и как им реагировать. 3. модуль "нарды" при запуске кидае комманду "добавить элемент в трей-меню". 4. на него реагирует модуль "трей" (если присутсвует, конечно) и коннектит слоты-сигналы с объектом, который пришёл в сигнале. 5. модуль "трей" по новому коннекту кидает что-то типа "готов" и модуль "нарды" закидывает туда готовый QAction* для меню. 6. модуль "трей" разрывает слот-сигнал с "нардами". тем самым я добиваюсь независимости модулей друг от друга. "нарды" знают, что надо отправить запрос ядру на добавления меню, и что если кто-то им потом ответит по другому слоту, кинуть туда элемент меню, а "трей" знает, что если кто-то у него попросит место в трее, то ему пофик кто это - лишь бы кинули потом элемент меню. в целом мне схема нравится, но буду рад другим идеям. на данный момент проблема в том, что я не понимаю, как через слот-сигнал передать указатель на любой объект. в данном примере этот объект - QAction, а другие модули могут меняться какими-то совсем другими данными, объектами и чем угодно. как реализовать? может есть ссылки на маны по построению подобных модульных приложений и их связок? буду рад ответу сюда, или по координатам ася 133733457 скайп ieroglif.ru jabber: ieroglif@jabber.myau.su |
|
|
kuler |
18.2.2009, 19:00
Сообщение
#2
|
Танцор диско Группа: Участник Сообщений: 441 Регистрация: 11.9.2008 Из: Москва Пользователь №: 289 Спасибо сказали: 6 раз(а) Репутация: -1 |
а сигналы и слоты наследуются?
|
|
|
AD |
18.2.2009, 19:13
Сообщение
#3
|
Профессионал Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: 17 |
Цитата In Qt, we have an alternative to the callback technique: We use signals and slots. A signal is emitted when a particular event occurs. Qt's widgets have many predefined signals, but we can always subclass widgets to add our own signals to them. A slot is a function that is called in response to a particular signal. Qt's widgets have many pre-defined slots, but it is common practice to subclass widgets and add your own slots so that you can handle the signals that you are interested in Вот эта фраза Цитата A slot is a function that is called in response to a particular signal подразумевает, что слот - эта функция, значит, обладает всеми ее свойствами и наследуется. На счет сигналов, полагаю, что тоже наследуются. Иначе в этом механизме нет особого смысла. |
|
|
Текстовая версия | Сейчас: 2.12.2024, 4:48 |