Название: Народ, помогите понять ... Отправлено: Anonymous от Февраль 17, 2005, 12:32 Как организовать обмен сигналами/событиями между виджетами, которые не находятся в одной области видимости?
Т.е. к примеру открывается в приложении два разных окна, по закрытии одного из них в другом чего нибудь происходит (update() к примеру какой-нибудь). попробовал используя QCustomEvent отсылать вот так QApplication::sendEvent(qApp, e), т.е. в качестве receiver использовать само приложение - виджеты из приложения не реагируют не фига. Чего-то я не понимаю. Название: Народ, помогите понять ... Отправлено: Sergeich от Февраль 17, 2005, 14:56 Что значит не в одной области видимости? В разных адресных пространствах (разных процессах)? или как?
Вместо QApplication::sendEvent() лучше использовать QApplication::postEvent(), она thread-safe. Вообще-то и sendEvent() должен работать, возможно у тебя какие-то косяки в обработчике событий. Название: Народ, помогите понять ... Отправлено: Anonymous от Февраль 17, 2005, 16:36 Не в одной области видимости имеется ввиду с точки зрения переменных С++.
Не знаю как это терминологически правильно сказать. Т.е. при использовании sendEvent(QObject * receiver, ...) или пускай postEvent(QObject * receiver, ...) у меня нет этого самого receiver как объекта в данном классе (виджете), т.к. мне нужно отослать сигнал /событие совсем в другой объект-приемник (несколько разных объектов-приемников), который никак не связан с объектом-инициатором события если не считать того, что они находятся в одном приложении QApplication. Название: Народ, помогите понять ... Отправлено: Sergeich от Февраль 17, 2005, 16:59 Тогда разошли событие всем окнам ( см. QApplication::topLevelWidgets() )
Название: Народ, помогите понять ... Отправлено: Anonymous от Февраль 17, 2005, 18:16 Если имеется ввиду вот так
CustomEvent * e = new CustomEvent(); QWidgetList *list = QApplication::topLevelWidgets(); QWidgetListIt it( *list ); QWidget * w; while ( (w=it.current()) != 0 ) { ++it; QApplication::postEvent( w, e ); } delete list; То это не работает. Такое ощущение, что Qt в этом случае не видит перегруженные методы. (не понимаю почему) Т.е. найдя виджет QWidget * w; из списка, я получаю доступ к методам и объектам класса QWidget, но не производного класса. А ведь у меня то мое окошко – это производный чайлд от QWidget и перегруженная процедура customEvent, которая ловит событие е, находится как раз в чайлде. :( Чего-то я не понимаю, вроде дело то простое - обмен между окошками. Название: Народ, помогите понять ... Отправлено: Sergeich от Февраль 17, 2005, 20:45 Написал тестик:
Код:
Все работает!!! и под виндой и под линухом!!! Проверь свой код. Название: Народ, помогите понять ... Отправлено: Ed от Февраль 21, 2005, 14:41 Да, действительно, все работает ...
Значит буду искать у себя ошибку. Спасибо! |