Название: QKeyEvent и QMainWidget. Проблема получения события главным окном. Помогите плз Отправлено: star62 от Декабрь 24, 2008, 11:15 Ситуация следующая. Есть главное окно, на нем еще виджеты(QSpinBox). У главного реализован keyPressEvent(QKeyEvent *event), но проблема в том что при старте фокус получают виджеты главного окна и они перехватывают keyPressEvent и не пропускают его до главного окна. Поэтому реализованный keyPressEvent(QKeyEvent *event) не срабатывает пока фокус не получит главное окно. Вариант с перемещением фокуса на главное окно с помощью Tab не нравиться.
Я подозреваю что есть возможность сказать чтобы виджеты передавали keyPressEvent(QKeyEvent *event) до главного окна(которое для них является родителем), но только не знаю как. Подскажите. Или какой другой вариант решения данной проблемы. Вариант переписи виджета так же отпадает. Название: Re: QKeyEvent и QMainWidget. Проблема получения события главным окном. Помогите плз Отправлено: Rcus от Декабрь 24, 2008, 11:23 Цитировать void QObject::installEventFilter ( QObject * filterObj ) автоматически можно поставить фильтр переопределив функциюInstalls an event filter filterObj on this object. For example: monitoredObj->installEventFilter(filterObj); Код в классе окна Название: Re: QKeyEvent и QMainWidget. Проблема получения события главным окном. Помогите плз Отправлено: star62 от Декабрь 24, 2008, 11:50 Отличный способ. Спасибо
Название: Re: QKeyEvent и QMainWidget. Проблема получения события главным окном. Помогите плз Отправлено: star62 от Декабрь 24, 2008, 14:28 :) После детальных разборов все оказалось не так радужно. А может я чего не до конца понял. Но получается так, что
Код: void QObject::childEvent ( QChildEvent * event ) Использование Код: void QObject::installEventFilter ( QObject * filterObj ) Есть ли способ сделать так чтобы любое событие попадало в первую очередь на главное окно, а от туда уже на нужный объект? Но только чтобы это был метод главного окна. Так сказать прослойка между инициатором события и его получателем. Название: Re: QKeyEvent и QMainWidget. Проблема получения события главным окном. Помогите плз Отправлено: BRE от Декабрь 24, 2008, 14:35 Цитата из assistant:
Код
Название: Re: QKeyEvent и QMainWidget. Проблема получения события главным окном. Помогите плз Отправлено: star62 от Декабрь 24, 2008, 14:58 Я так и зделал. Но это приводит к тому что необходимо каждому потомку установить этот фильтр.
Название: Re: QKeyEvent и QMainWidget. Проблема получения события главным окном. Помогите плз Отправлено: Rcus от Декабрь 24, 2008, 15:11 Я имел ввиду примерно следующую схему
Код ну или вместо переопределения ::childEvent можно воспользоваться foreach Название: Re: QKeyEvent и QMainWidget. Проблема получения события главным окном. Помогите плз Отправлено: ритт от Декабрь 24, 2008, 15:19 только что практически такой же примерчик набивал...не успел
стар, а объясни: на кой ляд нужно перехватывать события в виджетах-редакторах? м.б. тогда и решение найдётся проще... Название: Re: QKeyEvent и QMainWidget. Проблема получения события главным окном. Помогите плз Отправлено: star62 от Январь 05, 2009, 13:08 Перехват нужен для того чтобы получать события нажатия кнопки... В первом посте все написал. Виджеты-редакторы или какие другие, разницы нет, просто у меня такие используются. А проблема в том, повторюсь, что, когда приложение запущено, активен(в фокусе) находиться какой-то виджет-потомок главного окна, он перехватывает событие keyPressEvent и в результате главное окно его не получает и должной реакции я не получаю, пока фокус не переместить на главное окно. Да и вообще вариант получения события keyPressEvent главным окном только при условии его активности не очень. Нужно чтобы при нажатии на кнопку клавиатуры происходило нужное действие в не зависимости не от чего.
Название: Re: QKeyEvent и QMainWidget. Проблема получения события главным окном. Помогите плз Отправлено: Dendy от Январь 05, 2009, 13:57 А вам нужны вполне конкретные клавиши, связанные с определёнными действиями, или вообще заблокировать события клавиатуры для дочерних элементов?
Название: Re: QKeyEvent и QMainWidget. Проблема получения события главным окном. Помогите плз Отправлено: star62 от Январь 05, 2009, 14:11 Мне нужны конкретные клавиши: Key_Right, Key_Left и Key_C
Название: Re: QKeyEvent и QMainWidget. Проблема получения события главным окном. Помогите плз Отправлено: Dendy от Январь 05, 2009, 14:31 Могу предложить топорный способ:
Код: Window::Window() Название: Re: QKeyEvent и QMainWidget. Проблема получения события главным окном. Помогите плз Отправлено: star62 от Январь 05, 2009, 14:43 Спасибо.
|