![]() |
|
|
![]()
|
|
| gpepsi |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 121 Регистрация: 14.3.2010 Репутация: нет Всего: нет |
можно ли как с помощью сигналов/слотов организовать цепочку обязанностей ?
З.Ы. Если у меня есть базовый класс, который имеет сигналы, то наследуются ли они ? Будет ли этот сигнал доступен наследнику ? |
|||
|
||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 48 Всего: 135 |
что это ? не знаю, нужно ли тебе это, но ты можешь коннектить сигнал к другому сигналу, и если на последний законнекчен слот, и ты эмитишь первый, то слот вызовется.
Да -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| RazrFalcon |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 29.7.2009 Репутация: 1 Всего: 1 |
что то такое? |
|||
|
||||
| gpepsi |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 121 Регистрация: 14.3.2010 Репутация: нет Всего: нет |
||||
|
||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 23 Всего: 72 |
Последний в цепочке - слот, он и обрабатывает. Например, на главной форме есть виджет редактора, и она соединяет свой слот с сигналом редактора об изменении текста. Редактор загружает документ и соединяет слот изменения документа со своим сигналом. Если бы у редактора не было сигнала об изменении документа, пришлось бы каждый раз при открытии документов делать пересоединение слотов. Но не совсем продумано, как определить источник сигнала - в многодокументном интерфейсе может быть несколько редакторов и документов. Это сообщение отредактировал(а) math64 - 7.10.2011, 15:39 |
|||
|
||||
| gpepsi |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 121 Регистрация: 14.3.2010 Репутация: нет Всего: нет |
||||
|
||||
| RazrFalcon |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 29.7.2009 Репутация: 1 Всего: 1 |
Ну тогда слот должен в конце запускать следующий слот.
|
|||
|
||||
| gpepsi |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 121 Регистрация: 14.3.2010 Репутация: нет Всего: нет |
получается тогда
так что-ли ? Это сообщение отредактировал(а) gpepsi - 8.10.2011, 07:52 |
|||
|
||||
| math64 |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 23 Всего: 72 |
Не то же самое. Ты не внимательно читал моё сообщение: Обработка событий идёт по пути: документ->редактор->главное окно Выбрали новый документ, теперь путь изменился: документ2->редактор->главное окно Главному окну не нужно делать пересоединение (а соединений редактор->главное окно может быть несколько), редактор присоединился к новому документу, и события теперь идут от него. Документ, от которого пришло событие, можно определить так:
Но это только потому, что мы знаем, что стрелочник - редактор, и спрашиваем у него куда он перевел стрелку. Добавлено через 14 минут и 50 секунд по коду из твоего предыдущего сообщения: хотя виртуальные слоты вроде как не запрещены, обычно так не делают, а из слота выполняют обычную виртуальную функцию. Такие хандлеры иногда приходится писать, чтобы контролировать путь сигнала - иногда у "стрелочника" нельзя узнать, куда переведена стрелка. |
||||
|
|||||
| gpepsi |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 121 Регистрация: 14.3.2010 Репутация: нет Всего: нет |
math64, ты что-то замутил. Нужно просто передать данные по цепочке. Каждый в цепочке может обработать данные.
З.Ы, Я описал базовый класс для обработчиков, только вот кроме него больше от QObject не унаследоваться, иначе множественное наследование Это сообщение отредактировал(а) gpepsi - 8.10.2011, 07:52 |
|||
|
||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 48 Всего: 135 |
gpepsi, посмотри в сторону http://developer.qt.nokia.com/doc/qt-4.7/s...achine-api.html
-------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 4 Всего: 110 |
удалено автором.
Это сообщение отредактировал(а) boostcoder - 8.10.2011, 09:32 |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 7 Всего: 250 |
gpepsi, вопрос можно свести к следующему:
можно ли подключить к сигналу несколько слотов различных объектов, и ответ станет очевидным.. а можно ли это, предлагаю Вам самим поискать в документации |
|||
|
||||
| gpepsi |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 121 Регистрация: 14.3.2010 Репутация: нет Всего: нет |
нет - тут подключение не к одному объекту нескольких слотов, а именно цепочка обязанностей. Каждый предыдущий обработчик может изменить данные для последующего. Поэтому важна последовательность подключения. Можно конечно для каждого объекта создавать сигнал и слот, но хотелось бы это оптимизировать (например наследованием) чтоб они создавались автоматически. В идеале бы использовать traits-ы, чтоб в эту цепочку нельзя было всунуть объект не удовлетворяющий условиям. А обработчики бы в конструкторе сами подключали бы нужные слоты |
|||
|
||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 23 Всего: 72 |
gpepsi
Обычно сигнал эмитируется при обработке события. Вместо использования сигнала можешь создать производный класс и в нём переопределить обработчик события - так быстрее, но для каждого аналогичного изменения поведения в разных объектах нужно писать новый класс. Можно написать фильтр событий - один и тот же фильтр можно использовать в разных объектах, но там общий обработчик на все типы событий и нужно сначала определить тип события. Ну и можно пользоваться сигналами и слотами, тут даже не надо знать типы источника сигнала и обработчика слота, нужно знать только их имена и два объекта, имеющие в дереве наследовния только один общий предок - QObject, но имеющие одинаковые слоты, могу заменять друг друга при connect'е (при обычном прогрмаммировании они должны бы были иметь общего предка с виртуальным методом вместо слота). Какой вариант лучше задавай конкрентый вопрос, в каждом конкрентом случае ответ будет свой. |
|||
|
||||
![]()
|
| Правила форума "С/С++: Кроссплатформенное программирование, 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. |