Russian Qt Forum

Qt => Общие вопросы => Тема начата: crashtua от Август 29, 2012, 09:04



Название: connect сигнал к сигналу - правильно ли?
Отправлено: crashtua от Август 29, 2012, 09:04
Ситуация - есть объект(А), на которого у меня уже есть ссылка. Тот объект А другой объект Б, и к тому Б мне нужно подконектится, но я не знаю когда будет создан Б, и ссылки на него у меня нету. Можно ли при создании Б подключить сигнал Б к сигналу А а в программе уже конектиться к слоту объекта А? Будет ли такое работать, и правильно ли так делать?


Название: Re: connect сигнал к сигналу - правильно ли?
Отправлено: Serr500 от Август 29, 2012, 09:32
Будет ли такое работать, и правильно ли так делать?
Работать будет. Но так делать неправильно. Что мешает соединить сигнал от Б сразу со слотом А?


Название: Re: connect сигнал к сигналу - правильно ли?
Отправлено: crashtua от Август 29, 2012, 10:32
По задумке, А является "провайдером" сигналов для других объектов, в принципе как и Б, но я могу получить ссылку на Б когда угодно, а на А у меня всегда есть. Поэтому было бы удобно, что бы другие объекты вообще не работали с Б.


Название: Re: connect сигнал к сигналу - правильно ли?
Отправлено: Serr500 от Август 29, 2012, 10:45
А где вы видите, что другие объекты работают с Б? Объект Б сам, получив ссылку на объект А, соединяет свой сигнал со слотом А. При разрушении Б он удалит соединение. Объект А вообще ничего не будет знать о других объектах.

P.S. Вы, конечно, можете сделать и так, как описали. Но имейте в  виду, что такой подход приводит к дополнительным операциям, которые в случае сигнал-слотовых соединений достаточно затратны. Вместо одной операции (сигнал Б - слот А) у вас будет две (сигнал Б - сигнал А - слот А).


Название: Re: connect сигнал к сигналу - правильно ли?
Отправлено: crashtua от Август 29, 2012, 11:27
В А никаких слотов нету, А просто связывающее звено между миром и Б, А создает Б,  просто так сложилось что мир не знает, когда появится Б, а надо подконектится к Б. Прикинул, проверил, затрат больших не будет, потому что Б создается раз за время жизни программы, и вызов типа сигнал-сигнал-слот будет один за время жизни программы. Спасибо за ответы.


Название: Re: connect сигнал к сигналу - правильно ли?
Отправлено: Serr500 от Август 29, 2012, 12:14
мир не знает, когда появится Б, а надо подконектится к Б
Похоже, Вы не понимаете, либо путаете сигналы со слотами. Не надо миру коннектиться к Б. Нужно, чтобы сам Б при создании коннектился к миру. Источник сигнала - это Б, следовательно, Б должен коннектиться, а не А! Это Б заинтересован в том, чтобы его сообщения обработали. Если бы наоборот, мир посылал сигналы Б, то ваша точка зрения была бы верна, да и то с ограничениями.


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


Название: Re: connect сигнал к сигналу - правильно ли?
Отправлено: Serr500 от Август 29, 2012, 15:32
Абсолютно не согласен.
Да ваше право.


Название: Re: connect сигнал к сигналу - правильно ли?
Отправлено: Bepec от Август 29, 2012, 15:35
Не, Serr500 я тоже с вами несогласен. В данном случае заинтересован "А" в получении сигналов с "Б". Ибо он его создаёт и его единственная цель в жизни - поработать прокладкой. :)
А "Б" пофиг - он и подконекченный сигналы тыряет и не подконекченный :)


Собственно главный ответ на вопрос темы - да, это нормально и разрешено троллями, но лучше бы сигналов много не плодить.


Название: Re: connect сигнал к сигналу - правильно ли?
Отправлено: andrew.k от Август 29, 2012, 15:57
Собственно главный ответ на вопрос темы - да, это нормально и разрешено троллями, но лучше бы сигналов много не плодить.
а то мир рухнет?


Название: Re: connect сигнал к сигналу - правильно ли?
Отправлено: crashtua от Август 29, 2012, 16:21
Serr500, а этим вы согласны  ;D:
По Вашей логике, у меня есть класс который выдает рандомные числа, при этом еммитит сигнал, с новым числом. То для того, что бы вывести числа в текстовое поле, мой генератор должен знать про то текстовое поле?! Выдрать отку да то ссылку, и подключить слот append() в своему сигналу?!


Название: Re: connect сигнал к сигналу - правильно ли?
Отправлено: crashtua от Август 29, 2012, 16:22
Собственно главный ответ на вопрос темы - да, это нормально и разрешено троллями, но лучше бы сигналов много не плодить.
Так эпично написали, будто троли сами всячески избегают использования сигналов\слотов :) .


Название: Re: connect сигнал к сигналу - правильно ли?
Отправлено: Igors от Август 29, 2012, 16:32
По Вашей логике, у меня есть класс который выдает рандомные числа, при этом еммитит сигнал, с новым числом. То для того, что бы вывести числа в текстовое поле, мой генератор должен знать про то текстовое поле?! Выдрать отку да то ссылку, и подключить слот append() в своему сигналу?! Текстовое поле заинтересованное в получении числа(или тот, кто его создал), а не еммитер нового рандомного числа!
Ни А ни Б не должны этим заниматься, нужно связующее звено - небольшой класс, часто с множественным наследованием (напр один интерфейс для A др для Б). И вообще-то это банальное, рядовое архитектурное решение (попривыкали с сигналами сачковать)


Название: Re: connect сигнал к сигналу - правильно ли?
Отправлено: andrew.k от Август 29, 2012, 16:38
Собственно главный ответ на вопрос темы - да, это нормально и разрешено троллями, но лучше бы сигналов много не плодить.
Так эпично написали, будто троли сами всячески избегают использования сигналов\слотов :) .
Верес боится, что ему достанется мало сигналов.
Поэтому рекомендует много не брать. Один сигнал в руки.


Название: Re: connect сигнал к сигналу - правильно ли?
Отправлено: Bepec от Август 29, 2012, 18:02
Меньше слов, больше дела, великан малютка :)