crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> сигналы и слоты, передача указателя на мой объект
ieroglif
  опции профиля:
сообщение 31.1.2009, 15:54
Сообщение #1


Студент
*

Группа: Новичок
Сообщений: 17
Регистрация: 19.1.2009
Из: планета Земля
Пользователь №: 496

Спасибо сказали: 0 раз(а)




Репутация:   0  


ситуация:
имеется ядро, которое подключает к себе кучу самых разных модулей (реализованных в виде шаред библиотек).
модули хотят друг с другом общаться.
у всех имеется единый интерфейс (логично) от которого они наследуются и по которому они и подгружаются.
но конкретная реализация каждого модуля своя. (что, в целом, тоже логично)

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

на данный момент реализация модульного интерфейса такая:

#ifndef IMODULE_H
#define IMODULE_H

#include "commands.h"
#include <QtPlugin>

class iModule : public QObject
{
public:
    virtual ~iModule() {}
    virtual void moduleStart(iModule*) = 0;
    virtual void moduleRun() = 0;
signals:
    void sendCommand( CMDS::Command, iModule* );
    void sendData( const QString );
public slots:
    virtual void getCommand( CMDS::Command, iModule* ) = 0;
    virtual void getData(const QString) = 0;
};

Q_DECLARE_INTERFACE(iModule,"ieroglif.module/1.0");


#endif // IMODULE_H


и на данный момент алгоритм вижу следующий:

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

подразумевает, что слот - эта функция, значит, обладает всеми ее свойствами и наследуется. На счет сигналов, полагаю, что тоже наследуются. Иначе в этом механизме нет особого смысла.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме
- ieroglif   сигналы и слоты   31.1.2009, 15:54
- - Litkevich Yuriy   Цитата(ieroglif @ 31.1.2009, 18:54) как ч...   31.1.2009, 17:01
- - ieroglif   ну типа эта =) указатель на QObject - это уже прия...   31.1.2009, 17:13
- - Litkevich Yuriy   Цитата(ieroglif @ 31.1.2009, 20:13) указа...   31.1.2009, 17:22
- - SABROG   В QObject'е достаточно информации. Из него ты ...   31.1.2009, 17:22
- - Litkevich Yuriy   в свое время находил проект с классом типа QMainWi...   31.1.2009, 17:34
- - Litkevich Yuriy   Цитата(ieroglif @ 31.1.2009, 18:54) как ч...   31.1.2009, 20:12
- - ieroglif   вот на тему сендера - это грамотный ход. тогда мод...   31.1.2009, 20:14
- - kuler   а сигналы и слоты наследуются?   18.2.2009, 19:00
|- - AD   ЦитатаIn Qt, we have an alternative to the callbac...   18.2.2009, 19:13
- - Litkevich Yuriy   Цитата(kuler @ 18.2.2009, 22:00) а сигнал...   18.2.2009, 19:57
- - kuler   просто хотелось в базовом классе законнектить сигн...   18.2.2009, 20:00
- - Litkevich Yuriy   Цитата(kuler @ 18.2.2009, 23:00) просто х...   18.2.2009, 20:05
- - kuler   ну у меня не вызывается (слот не срабатывает), а в...   18.2.2009, 20:25
|- - SABROG   Цитата(kuler @ 18.2.2009, 20:25) ну у мен...   18.2.2009, 20:40
- - Константин   мужики, чего хернёй маетесь? слоты - это обычные ...   18.2.2009, 21:49
- - kuler   оказалось имеет значение порядок наследования, иб...   19.2.2009, 11:19
- - Litkevich Yuriy   Цитата(kuler @ 19.2.2009, 14:19) ибо у ме...   19.2.2009, 15:07
- - kuler   вот такой вопрос - на графике появляется контекстн...   4.3.2009, 11:41
- - SABROG   Давай минимальный компилируемый пример   4.3.2009, 12:08
- - kuler   SABROG, тут тяжело ибо Qwt используется   4.3.2009, 12:20
- - kuler   зарисовки кода //это слот который вызывается при к...   4.3.2009, 14:57
- - kwisp   kuler, по документации 3 варианта 1. слот вызван ...   4.3.2009, 15:21
- - kuler   Цитата(kwisp @ 4.3.2009, 15:21) слот вызв...   4.3.2009, 15:46
- - Litkevich Yuriy   это определенно сигнально-слотовая связь, а вот по...   4.3.2009, 16:02
- - kwisp   Цитата(kuler @ 4.3.2009, 15:46) ну если г...   4.3.2009, 16:04
- - Litkevich Yuriy   kuler, можешь ui-файл дать?   4.3.2009, 16:07
- - kuler   Цитата(kwisp @ 4.3.2009, 16:04) нет не гр...   4.3.2009, 16:16
- - kwisp   Цитата(kuler @ 4.3.2009, 16:16) по идее э...   4.3.2009, 16:26
- - Litkevich Yuriy   Цитата(kwisp @ 4.3.2009, 19:26) где соеди...   4.3.2009, 16:31
- - kwisp   Цитата(Litkevich Yuriy @ 4.3.2009, 16:31)...   4.3.2009, 16:48
- - SABROG   Я думал над этим, но разницы нет, т.к. тут явно вы...   4.3.2009, 17:05
- - kuler   Цитата(kwisp @ 4.3.2009, 16:48) еще вопро...   4.3.2009, 17:09
- - SABROG   В момент работы программы. Просто запускаешь её, ж...   4.3.2009, 17:19
- - kuler   Цитата(SABROG @ 4.3.2009, 17:19) нету ли ...   4.3.2009, 17:28
- - kwisp   kuler, попробуй тест написать. одно соединение ав...   4.3.2009, 17:33
- - Litkevich Yuriy   Цитата(kwisp @ 4.3.2009, 19:48) еще вопро...   4.3.2009, 18:11
|- - SABROG   Цитата(Litkevich Yuriy @ 4.3.2009, 18:11)...   4.3.2009, 18:15
- - kwisp   Цитата(Litkevich Yuriy @ 4.3.2009, 18:11)...   4.3.2009, 18:19


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


4 чел. читают эту тему (гостей: 4, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 2.12.2024, 4:48