Название: наследоваие событий потомками Отправлено: vux от Ноября 10, 2011, 23:29 у меня есть виджет внутри которого находяться другие виджеты.
Этому (главному) я назначаю eventFilter. Но мне хочеться чтобы внутренние тоже реагировали на этот фильтр - не хочеться назначать его на приложение цэликом в цэлях экономии ресурсов. Еще нюанс в том что виджэты(потомки) будут постоянно появляться в главном виджэте. Есть ли способ решить мою задачу? Название: Re: наследоваие событий потомками Отправлено: andrew.k от Ноября 10, 2011, 23:36 Код Тебя интересует else. В этом случае события должны доходить до потомков. А ты видимо всегда возвращаешь true. Если я вообще правильно понял, что тебе требуется. Кстати, сколько ресурсов удалось сэкономить в твоем подходе? ;) Название: Re: наследоваие событий потомками Отправлено: vux от Ноября 11, 2011, 00:00 я пишу на питоне
Код
если делать так, как вы советуете то событие не доходит до потомка/ В моем случае экономить нада так как в програме присутствует openGL виджет. Мне нада навесить много разных событий на мышу. Если я назначу фильтр всему приложению - то события будут отслеживаться в openGl-зоне где будет вестись интенсивная работа той жэ мышой Название: Re: наследоваие событий потомками Отправлено: andrew.k от Ноября 11, 2011, 00:27 Код
А вот так? ПС. Что за странная манера писать на форуме "вы"? ;D Название: Re: наследоваие событий потомками Отправлено: vux от Ноября 11, 2011, 00:32 Название: Re: наследоваие событий потомками Отправлено: andrew.k от Ноября 11, 2011, 01:26 а без фильтра реагирует? Такого же не может быть.
Название: Re: наследоваие событий потомками Отправлено: andrew.k от Ноября 11, 2011, 02:03 Я понял.
Приведенный мной код тебе не поможет, похоже Событие попадает сначала в потомок и если там оно не обработалось (return false), потому что обработчика нет и оно идет выше, к родителю. Ты перехватываешь его в родителе, когда уже поздновато. Название: Re: наследоваие событий потомками Отправлено: vux от Ноября 11, 2011, 11:00 Я понял. Приведенный мной код тебе не поможет, похоже Событие попадает сначала в потомок и если там оно не обработалось (return false), потому что обработчика нет и оно идет выше, к родителю. Ты перехватываешь его в родителе, когда уже поздновато. Я это тоже понимаю. Внутреннему виджету фильтр не назначен, вот он и молчит - он жэ всетаки под мышой в этот момент. Нада чтобы внутренние виджэты были образно говоря прозрачными - и первыми должны отлавливаться события нижнего главного виджэта. Типа чтоб потомки сначала обрабатывали свои события, а потом вызывали события главного виджэта или наоборот. Это можно сделать назначением фильтра всем внутренним контролам. Но я не могу этого сделать - внутренность главного виджэта постоянно меняэться - одни контролы удаляються - другие появляються. Как быть я пока не знаю :( Название: Re: наследоваие событий потомками Отправлено: SASA от Ноября 14, 2011, 17:39 Код для "прозрачности" класса виджетов CMyWidget для евента MouseMove.
Код: bool CMyApp::notify ( QObject * receiver, QEvent * event ) З.Ы. Если Вы собираетесь пользоваться этим кодом, то делаете это на свой страх и риск. За возможные часы проведенные в дебагере автор ответственности не несет. :) |