Russian Qt Forum
Май 15, 2024, 23:16 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: connect сигнал к сигналу - правильно ли?  (Прочитано 5653 раз)
crashtua
Гость
« : Август 29, 2012, 09:04 »

Ситуация - есть объект(А), на которого у меня уже есть ссылка. Тот объект А другой объект Б, и к тому Б мне нужно подконектится, но я не знаю когда будет создан Б, и ссылки на него у меня нету. Можно ли при создании Б подключить сигнал Б к сигналу А а в программе уже конектиться к слоту объекта А? Будет ли такое работать, и правильно ли так делать?
Записан
Serr500
Гость
« Ответ #1 : Август 29, 2012, 09:32 »

Будет ли такое работать, и правильно ли так делать?
Работать будет. Но так делать неправильно. Что мешает соединить сигнал от Б сразу со слотом А?
Записан
crashtua
Гость
« Ответ #2 : Август 29, 2012, 10:32 »

По задумке, А является "провайдером" сигналов для других объектов, в принципе как и Б, но я могу получить ссылку на Б когда угодно, а на А у меня всегда есть. Поэтому было бы удобно, что бы другие объекты вообще не работали с Б.
Записан
Serr500
Гость
« Ответ #3 : Август 29, 2012, 10:45 »

А где вы видите, что другие объекты работают с Б? Объект Б сам, получив ссылку на объект А, соединяет свой сигнал со слотом А. При разрушении Б он удалит соединение. Объект А вообще ничего не будет знать о других объектах.

P.S. Вы, конечно, можете сделать и так, как описали. Но имейте в  виду, что такой подход приводит к дополнительным операциям, которые в случае сигнал-слотовых соединений достаточно затратны. Вместо одной операции (сигнал Б - слот А) у вас будет две (сигнал Б - сигнал А - слот А).
Записан
crashtua
Гость
« Ответ #4 : Август 29, 2012, 11:27 »

В А никаких слотов нету, А просто связывающее звено между миром и Б, А создает Б,  просто так сложилось что мир не знает, когда появится Б, а надо подконектится к Б. Прикинул, проверил, затрат больших не будет, потому что Б создается раз за время жизни программы, и вызов типа сигнал-сигнал-слот будет один за время жизни программы. Спасибо за ответы.
Записан
Serr500
Гость
« Ответ #5 : Август 29, 2012, 12:14 »

мир не знает, когда появится Б, а надо подконектится к Б
Похоже, Вы не понимаете, либо путаете сигналы со слотами. Не надо миру коннектиться к Б. Нужно, чтобы сам Б при создании коннектился к миру. Источник сигнала - это Б, следовательно, Б должен коннектиться, а не А! Это Б заинтересован в том, чтобы его сообщения обработали. Если бы наоборот, мир посылал сигналы Б, то ваша точка зрения была бы верна, да и то с ограничениями.
Записан
crashtua
Гость
« Ответ #6 : Август 29, 2012, 14:30 »

мир не знает, когда появится Б, а надо подконектится к Б
Похоже, Вы не понимаете, либо путаете сигналы со слотами. Не надо миру коннектиться к Б. Нужно, чтобы сам Б при создании коннектился к миру. Источник сигнала - это Б, следовательно, Б должен коннектиться, а не А! Это Б заинтересован в том, чтобы его сообщения обработали. Если бы наоборот, мир посылал сигналы Б, то ваша точка зрения была бы верна, да и то с ограничениями.
Абсолютно не согласен. Когда компания "Мерседес" делает автомобили, она заходит к каждому в дом и старается всучить новую машину? Или она дает рекламу, а потом люди с мира приходят и покупают их(при желании)? И каким образом еммитер сигналов в Qt может быть заинтересован в обработке сигнала, если сигналы\слоты это реализация паттерна обсервер, который предполагает нормальную работу даже без слушателей(читай - "слотов")? По моему это Вы что то недопонимаете. По Вашей логике, у меня есть класс который выдает рандомные числа, при этом еммитит сигнал, с новым числом. То для того, что бы вывести числа в текстовое поле, мой генератор должен знать про то текстовое поле?! Выдрать отку да то ссылку, и подключить слот append() в своему сигналу?! Текстовое поле заинтересованное в получении числа(или тот, кто его создал), а не еммитер нового рандомного числа!
« Последнее редактирование: Август 29, 2012, 14:53 от crashtua » Записан
Serr500
Гость
« Ответ #7 : Август 29, 2012, 15:32 »

Абсолютно не согласен.
Да ваше право.
Записан
Bepec
Гость
« Ответ #8 : Август 29, 2012, 15:35 »

Не, Serr500 я тоже с вами несогласен. В данном случае заинтересован "А" в получении сигналов с "Б". Ибо он его создаёт и его единственная цель в жизни - поработать прокладкой. Улыбающийся
А "Б" пофиг - он и подконекченный сигналы тыряет и не подконекченный Улыбающийся


Собственно главный ответ на вопрос темы - да, это нормально и разрешено троллями, но лучше бы сигналов много не плодить.
Записан
andrew.k
Гость
« Ответ #9 : Август 29, 2012, 15:57 »

Собственно главный ответ на вопрос темы - да, это нормально и разрешено троллями, но лучше бы сигналов много не плодить.
а то мир рухнет?
Записан
crashtua
Гость
« Ответ #10 : Август 29, 2012, 16:21 »

Serr500, а этим вы согласны  Смеющийся:
По Вашей логике, у меня есть класс который выдает рандомные числа, при этом еммитит сигнал, с новым числом. То для того, что бы вывести числа в текстовое поле, мой генератор должен знать про то текстовое поле?! Выдрать отку да то ссылку, и подключить слот append() в своему сигналу?!
Записан
crashtua
Гость
« Ответ #11 : Август 29, 2012, 16:22 »

Собственно главный ответ на вопрос темы - да, это нормально и разрешено троллями, но лучше бы сигналов много не плодить.
Так эпично написали, будто троли сами всячески избегают использования сигналов\слотов Улыбающийся .
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #12 : Август 29, 2012, 16:32 »

По Вашей логике, у меня есть класс который выдает рандомные числа, при этом еммитит сигнал, с новым числом. То для того, что бы вывести числа в текстовое поле, мой генератор должен знать про то текстовое поле?! Выдрать отку да то ссылку, и подключить слот append() в своему сигналу?! Текстовое поле заинтересованное в получении числа(или тот, кто его создал), а не еммитер нового рандомного числа!
Ни А ни Б не должны этим заниматься, нужно связующее звено - небольшой класс, часто с множественным наследованием (напр один интерфейс для A др для Б). И вообще-то это банальное, рядовое архитектурное решение (попривыкали с сигналами сачковать)
Записан
andrew.k
Гость
« Ответ #13 : Август 29, 2012, 16:38 »

Собственно главный ответ на вопрос темы - да, это нормально и разрешено троллями, но лучше бы сигналов много не плодить.
Так эпично написали, будто троли сами всячески избегают использования сигналов\слотов Улыбающийся .
Верес боится, что ему достанется мало сигналов.
Поэтому рекомендует много не брать. Один сигнал в руки.
Записан
Bepec
Гость
« Ответ #14 : Август 29, 2012, 18:02 »

Меньше слов, больше дела, великан малютка Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.151 секунд. Запросов: 23.