Название: Об излучении и переизлучении сигналов Отправлено: Alp от Ноябрь 25, 2009, 14:46 Не смог придумать лучшего перевода для emit/re-emit.
Хочу спросить вашего совета, как лучше делать: - Класс испускает сигнал iAmDying - Его "родитель" этот сигнал ловит и в слоте излучает свой сигнал childDying, в параметрах которого указывает на себя и индекс потомка в коллекции (закрытая). - Сигнал родителя кто-то где-то использует. Вопрос: как логичнее оформить сигнал iAmDying - как iAmDying(QChild* childPtr), в предке излучать childDying(this, collection.indexOf(childPtr))? или - как iAmDying(), в предке излучать childDying(this, collection.indexOf(sender()))? Вопрос в известной степени о вкусах различных фломастеров разного цвета, но интересно что считается более qt-way? =) Название: Re: Об излучении и переизлучении сигналов Отправлено: niXman от Ноябрь 25, 2009, 15:07 Не понял разницу между вашими вариантами.
Название: Re: Об излучении и переизлучении сигналов Отправлено: Alp от Ноябрь 25, 2009, 15:37 Не понял разницу между вашими вариантами. Код
Код Помечено комментириями. Разница тут исключительно в эээ... стилистике что ли. В классе B все элементы коллекции коннектятся на слот, разумеется. Название: Re: Об излучении и переизлучении сигналов Отправлено: niXman от Ноябрь 25, 2009, 16:18 Я бы использовал QSignalMapper. Причина...эээ...стиль ;)
Название: Re: Об излучении и переизлучении сигналов Отправлено: lit-uriy от Ноябрь 25, 2009, 18:16 а зачем себя передавать в качестве аргумента?
ведь есть же sender(), который вернёт указатель на объект пославший сигнал. Название: Re: Об излучении и переизлучении сигналов Отправлено: niXman от Ноябрь 25, 2009, 18:47 Ну.. sender() - не совсем правильное решение. Для таких нужд, троли создали QSignalMapper. ИМХО удобнее.
Название: Re: Об излучении и переизлучении сигналов Отправлено: Alp от Ноябрь 25, 2009, 18:56 а зачем себя передавать в качестве аргумента? Вот в этом в том числе и был вопрос.ведь есть же sender(), который вернёт указатель на объект пославший сигнал. Вообще я собирался отказываться от передачи виджета из которого кидается сигнал. Но если верить эксперименту, то при коннекте сигналА-сигналВ, в месте приёма сигналаВ sender() уже будет не А, а В. Это и остановило. Название: Re: Об излучении и переизлучении сигналов Отправлено: Igors от Ноябрь 25, 2009, 19:44 Вопрос в известной степени о вкусах различных фломастеров разного цвета, но интересно что считается более qt-way? =) Встречный вопрос: а Вы этим на работе занимаетесь или дома?Название: Re: Об излучении и переизлучении сигналов Отправлено: Alp от Ноябрь 25, 2009, 20:13 Вопрос в известной степени о вкусах различных фломастеров разного цвета, но интересно что считается более qt-way? =) Встречный вопрос: а Вы этим на работе занимаетесь или дома?Собственно, я удачно начал этим заниматься пару месяцев назад - объяснил руководителю, что писать UI под инду и под мак прощзе один раз, а не два. Название: Re: Об излучении и переизлучении сигналов Отправлено: lit-uriy от Ноябрь 26, 2009, 01:00 alp, а зачем вообще класс/объект пересыльщик?
Название: Re: Об излучении и переизлучении сигналов Отправлено: Alp от Ноябрь 26, 2009, 09:44 alp, а зачем вообще класс/объект пересыльщик? Дело в том, что те, кто подписываются на сигналы класса B ничего не знают (и не должны знать) о его внутренней структуре. Есть интерфейс обмена данными, а свой лайаут виджет А обновляет сам в соответствии с этими самыми данными.Название: Re: Об излучении и переизлучении сигналов Отправлено: Igors от Ноябрь 26, 2009, 21:43 alp, а зачем вообще класс/объект пересыльщик? Дело в том, что те, кто подписываются на сигналы класса B ничего не знают (и не должны знать) о его внутренней структуре. Есть интерфейс обмена данными, а свой лайаут виджет А обновляет сам в соответствии с этими самыми данными.A - источник сигнала B - ре-эмиттер C - получатель/подписчик Путь сигнала A->B->C. Получается что "B" знает всех (A и C). Без разницы "C" подписывается сам - или "B" подписывает его. А если так, то почему бы не поручить тому же "B" установить прямой коннект A->C? Не вижу никакого выигрыша в пере-испускании если ничего содержательного "B" с сигналом не делает Название: Re: Об излучении и переизлучении сигналов Отправлено: Alp от Ноябрь 27, 2009, 11:55 alp, а зачем вообще класс/объект пересыльщик? Дело в том, что те, кто подписываются на сигналы класса B ничего не знают (и не должны знать) о его внутренней структуре. Есть интерфейс обмена данными, а свой лайаут виджет А обновляет сам в соответствии с этими самыми данными.A - источник сигнала B - ре-эмиттер C - получатель/подписчик Путь сигнала A->B->C. Получается что "B" знает всех (A и C). Без разницы "C" подписывается сам - или "B" подписывает его. А если так, то почему бы не поручить тому же "B" установить прямой коннект A->C? Не вижу никакого выигрыша в пере-испускании если ничего содержательного "B" с сигналом не делает А с какого перепугу В знает про С?? В просто переизлучает сигнал и кто на него подпишется - дело не его =) Здесь знание друг друга как раз такое, как ты нарисовал - однонаправленное, только направлено в другую сторону. Название: Re: Об излучении и переизлучении сигналов Отправлено: Igors от Ноябрь 27, 2009, 13:09 А с какого перепугу В знает про С?? В просто переизлучает сигнал и кто на него подпишется - дело не его =) А каким образом C "подпишется"? Чтобы сделать connect источник нужно знать, значит как минимум указатель на B нужно подавать в C. То есть C знает B - никак не лучше. Зависимости никуда не исчезают при использовании сигналов. Хотя конечно - выглядит красиво/идейно :)Название: Re: Об излучении и переизлучении сигналов Отправлено: Alp от Ноябрь 27, 2009, 13:36 А с какого перепугу В знает про С?? В просто переизлучает сигнал и кто на него подпишется - дело не его =) А каким образом C "подпишется"? Чтобы сделать connect источник нужно знать, значит как минимум указатель на B нужно подавать в C. То есть C знает B - никак не лучше. Зависимости никуда не исчезают при использовании сигналов. Хотя конечно - выглядит красиво/идейно :) |