Название: Определить от кого пришел сигнал Отправлено: SlimSlot от Март 27, 2012, 15:47 Добрый день!
Подскажите, возможно ли определить от кого пришел сигнал - от пользователя или программно? Т.е например, пользователь кликнул мышью по кнопке, либо я сигнал отослал данного клика. Название: Re: Определить от кого пришел сигнал Отправлено: Пантер от Март 27, 2012, 15:49 http://doc-snapshot.qt-project.org/4.8/qobject.html#sender
Название: Re: Определить от кого пришел сигнал Отправлено: mutineer от Март 27, 2012, 15:51 вроде нельзя
Название: Re: Определить от кого пришел сигнал Отправлено: Пантер от Март 27, 2012, 15:59 А, да, не так прочитал. Если сам кликаешь, то никак.
Название: Re: Определить от кого пришел сигнал Отправлено: GreatSnake от Март 27, 2012, 17:01 Да можно всё.
Просто кое-что придётся самому сделать: 1. перегрузить QApplication::notify() и в нём следить за всеми кликами и хранить последний QWidget::winId() на котором нажали и время нажатия. 2. В слоте проверять текущий QWidget::winId() с сохранённым и дельту текущего времени с сохранённым. Название: Re: Определить от кого пришел сигнал Отправлено: SlimSlot от Март 27, 2012, 18:14 Да можно всё. Просто кое-что придётся самому сделать: 1. перегрузить QApplication::notify() и в нём следить за всеми кликами и хранить последний QWidget::winId() на котором нажали и время нажатия. 2. В слоте проверять текущий QWidget::winId() с сохранённым и дельту текущего времени с сохранённым. Да не, косо как-то по времени нажатия сверяться. То что notify перегружать придется я предполагал, но что дальше не могу сообразить. Плохо что нет. Но попробуем. Название: Re: Определить от кого пришел сигнал Отправлено: GreatSnake от Март 27, 2012, 18:24 Да не, косо как-то по времени нажатия сверяться. И что в этом косого?Название: Re: Определить от кого пришел сигнал Отправлено: sudo от Март 27, 2012, 18:37 Может с кастомными сигналами сделать? Взять слот, к нему приконнектить сигнал от кнопки. Из слота отправлять свой сигнал с булевым значением. Если из него отправилось, то, например, с true, а если программно, то с false. Головняк, конечно, тот ещё получится, но будет работать. Или обязательно нужен штатный сигнал?
Название: Re: Определить от кого пришел сигнал Отправлено: SlimSlot от Март 28, 2012, 13:09 Да не, косо как-то по времени нажатия сверяться. И что в этом косого?Кос не способ. События на мой взгляд должны работать максимально быстро. А тут получается навешивание доп. функционала. В любом случае по архитектуре это самое правильное. Может с кастомными сигналами сделать? Взять слот, к нему приконнектить сигнал от кнопки. Из слота отправлять свой сигнал с булевым значением. Если из него отправилось, то, например, с true, а если программно, то с false. Головняк, конечно, тот ещё получится, но будет работать. Или обязательно нужен штатный сигнал? Что-то типа перегрузки сигнала?Название: Re: Определить от кого пришел сигнал Отправлено: sudo от Март 28, 2012, 13:14 Типа такого. Если слот отработал как реакция на сигнал, тогда true отправится. Если слот вызвался напрямую, отправится false. А приёмник сигнала уже будет разбираться, что там пришло и в зависимости от параметра работать
Код
Название: Re: Определить от кого пришел сигнал Отправлено: GreatSnake от Март 28, 2012, 13:31 События на мой взгляд должны работать максимально быстро. А тут получается навешивание доп. функционала. На скорость такое "навешивание" никоим образом влиять не должно.Название: Re: Определить от кого пришел сигнал Отправлено: Igors от Март 28, 2012, 14:18 ..либо я сигнал отослал данного клика. Ну и зарядите флажок/переменную показывающую что это Вы послали. |