Название: QWidget::keyPressEvent не ловит обычные клавиши, только служебные Отправлено: Маус от Ноябрь 15, 2013, 12:11 QWidget::keyPressEvent не ловит
Версия Qt 4.6.1 коммерческая, MS Visual Сыр++ 2008. Название: Re: QWidget::keyPressEvent не ловит обычные клавиши, только служебные Отправлено: Маус от Ноябрь 15, 2013, 12:49 Оказалось, на виджете расоложен QTreeView, пожирающий нажатия обычных кнопок. Как с минимальными затратами вернуть от него нажатие кнопки?
Запустить в нем свой QWidget::keyPressEvent и отправлять сообщения родителю или есть что-либо попроще? Или есть ли возможность устанавливать для QtreeView режим, когда он не будет принимать ввод с клавиатуры? Название: Re: QWidget::keyPressEvent не ловит обычные клавиши, только служебные Отправлено: Bepec от Ноябрь 15, 2013, 13:02 installEventFilter курите в ассистенте. И да, на все view фильтр нужно ставить на viewport().
Название: Re: QWidget::keyPressEvent не ловит обычные клавиши, только служебные Отправлено: Маус от Ноябрь 15, 2013, 15:43 Сделал пока как писал, вечером почитаю про installEventFilter.
Всем спасибо! Чувствую реальную помощь сообщества: как написал на форум, так в голову сразу правильные решения нагрянули! ;) Название: Re: QWidget::keyPressEvent не ловит обычные клавиши, только служебные Отправлено: Маус от Ноябрь 15, 2013, 16:18 installEventFilter есть только в QDialog, а в QWidget нет такого метода и да, после того, как я натравил на QWidget метод keyPressEvent, забарахлил eventFilter, стоящий в QDialog (создаваемый у меня из QWidget-a). Т.е. если открыть QDialog, то в нем все прекрасно работает, перевожу курсор клавы (фокус ввода) на QWidget, там тоже всё прекрасно работает, возвращаю фокус ввода на QTreeView, расположенный на QDialog-e - нифига не работает. Смещаю фокус на QDialog - здесь работает. Фишка в том, что здесь я не могу переопределить метод keyPressEvent, т.к. используется чистый класс QTreeView (не переопределенный).
Что делать? Название: Re: QWidget::keyPressEvent не ловит обычные клавиши, только служебные Отправлено: Old от Ноябрь 15, 2013, 16:21 Не говорите ерунду. :)
installEventFilter есть начиная с QObject во всех его потомках. Название: Re: QWidget::keyPressEvent не ловит обычные клавиши, только служебные Отправлено: Alex Custov от Ноябрь 15, 2013, 16:42 Название: Re: QWidget::keyPressEvent не ловит обычные клавиши, только служебные Отправлено: Маус от Ноябрь 16, 2013, 19:37 еще раз: installEventFilter +eventFilter не берет дочернюю область. Т.е. виджет QDialog он отрабатывает а вот на "дочке" QTreeView клавиатура не "ловится"
Название: Re: QWidget::keyPressEvent не ловит обычные клавиши, только служебные Отправлено: Bepec от Ноябрь 16, 2013, 20:03 installEventFilter курите в ассистенте. И да, на все view фильтр нужно ставить на viewport(). Название: Re: QWidget::keyPressEvent не ловит обычные клавиши, только служебные Отправлено: michael1960 от Ноябрь 16, 2013, 20:40 Может быть, такое решение Вам подойдёт:
Данное решение работает в Windows, в Linux и Mac, и не зависит от компилятора. А также, не зависит от версии Qt. Код: void <Имя вашего класса>::keyPressEvent(QKeyEvent *event) Название: Re: QWidget::keyPressEvent не ловит обычные клавиши, только служебные Отправлено: Nidxogg от Ноябрь 16, 2013, 21:31 "Папы" пришли советовать.
Лучше бы сделали how to по наиболее часто задаваемым вопросам. |