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
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
Litkevich Yuriy
  опции профиля:
сообщение 31.1.2009, 17:01
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

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




Репутация:   94  


Цитата(ieroglif @ 31.1.2009, 18:54) *
как через слот-сигнал передать указатель на любой объект.
передавай указатель на QObject, соответственно все объекты должны быть его наследниками. Это достаточно универсально.

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

Сообщений в этой теме
- 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


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


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




RSS Текстовая версия Сейчас: 27.4.2024, 13:23