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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Определить от кого пришел сигнал  (Прочитано 5822 раз)
SlimSlot
Гость
« : Март 27, 2012, 15:47 »

Добрый день!

Подскажите, возможно ли определить от кого пришел сигнал - от пользователя или программно?
Т.е например, пользователь кликнул мышью по кнопке, либо я сигнал отослал данного клика.
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #1 : Март 27, 2012, 15:49 »

http://doc-snapshot.qt-project.org/4.8/qobject.html#sender
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
mutineer
Гость
« Ответ #2 : Март 27, 2012, 15:51 »

вроде нельзя
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #3 : Март 27, 2012, 15:59 »

А, да, не так прочитал. Если сам кликаешь, то никак.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #4 : Март 27, 2012, 17:01 »

Да можно всё.
Просто кое-что придётся самому сделать:
1. перегрузить QApplication::notify() и в нём следить за всеми кликами и хранить последний QWidget::winId() на котором нажали и время нажатия.
2. В слоте проверять текущий QWidget::winId() с сохранённым и дельту текущего времени с сохранённым.
Записан

Qt 5.11/4.8.7 (X11/Win)
SlimSlot
Гость
« Ответ #5 : Март 27, 2012, 18:14 »

Да можно всё.
Просто кое-что придётся самому сделать:
1. перегрузить QApplication::notify() и в нём следить за всеми кликами и хранить последний QWidget::winId() на котором нажали и время нажатия.
2. В слоте проверять текущий QWidget::winId() с сохранённым и дельту текущего времени с сохранённым.

Да не, косо как-то по времени нажатия сверяться.

То что notify перегружать придется я предполагал, но что дальше не могу сообразить.

Плохо что нет. Но попробуем.


Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #6 : Март 27, 2012, 18:24 »

Да не, косо как-то по времени нажатия сверяться.
И что в этом косого?
Записан

Qt 5.11/4.8.7 (X11/Win)
sudo
Гость
« Ответ #7 : Март 27, 2012, 18:37 »

Может с кастомными сигналами сделать? Взять слот, к нему приконнектить сигнал от кнопки. Из слота отправлять свой сигнал с булевым значением. Если из него отправилось, то, например, с true, а если программно, то с false. Головняк, конечно, тот ещё получится, но будет работать. Или обязательно нужен штатный сигнал?
Записан
SlimSlot
Гость
« Ответ #8 : Март 28, 2012, 13:09 »

Да не, косо как-то по времени нажатия сверяться.
И что в этом косого?

Кос не способ.
События на мой взгляд должны работать максимально быстро. А тут получается навешивание доп. функционала.
В любом случае по архитектуре это самое правильное.
Может с кастомными сигналами сделать? Взять слот, к нему приконнектить сигнал от кнопки. Из слота отправлять свой сигнал с булевым значением. Если из него отправилось, то, например, с true, а если программно, то с false. Головняк, конечно, тот ещё получится, но будет работать. Или обязательно нужен штатный сигнал?
Что-то типа перегрузки сигнала?
Записан
sudo
Гость
« Ответ #9 : Март 28, 2012, 13:14 »

Типа такого. Если слот отработал как реакция на сигнал, тогда true отправится. Если слот вызвался напрямую, отправится false. А приёмник сигнала уже будет разбираться, что там пришло и в зависимости от параметра работать

Код
C++ (Qt)
connect(obj, SIGNAL(sg()), SLOT(sl()));
 
 
void Object::sl()
{
 emit mySignal(sender() ? true : false);
}
 
 
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #10 : Март 28, 2012, 13:31 »

События на мой взгляд должны работать максимально быстро. А тут получается навешивание доп. функционала.
На скорость такое "навешивание" никоим образом влиять не должно.
Записан

Qt 5.11/4.8.7 (X11/Win)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #11 : Март 28, 2012, 14:18 »

..либо я сигнал отослал данного клика.
Ну и зарядите флажок/переменную показывающую что это Вы послали.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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