![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
alzasr |
![]()
Сообщение
#1
|
Студент ![]() Группа: Участник Сообщений: 21 Регистрация: 6.10.2011 Пользователь №: 2926 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Мне нужно перехватывать все нажатия клавиш в QTableWidget и после анализа либо что-то сделать (в основном изменить фокус ввода) либо передать событие дальше на обработку.
Погуглив нашел 2 варианта. 1. Насловаться от QTableWidget, переопределить keyPressEvent 2. использовать eventFilter Опробовал оба способа, но не все клавиши перехватываются. При редактировании ячейки не реагирует на нажатие стрелок влево-вправо, а вверх-вниз все норм. Я так понимаю, что какой-то виджет, отвечающий за ячейку, перехватывает события и если события ей подходят, то прерывают цепочку. У QTableWidgetItem нет installEventFilter и keyPressEvent, как я понял по исходникам это не QWidget. Подскажите, где копать или где я неправ. |
|
|
![]() |
alzasr |
![]()
Сообщение
#2
|
Студент ![]() Группа: Участник Сообщений: 21 Регистрация: 6.10.2011 Пользователь №: 2926 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Из того что нашел в исходниках. Экземпляр виджета редактирования создается в методе QWidget *QAbstractItemViewPrivate::editor, который возвращает ссылку на созданый метод. Этот метод используется в void QAbstractItemView::openPersistentEditor вот в этом куске
и сохраняется в d, что это за класс пока не знаю, но он недоступен из потомка QTableWidget. Вообще в QAbstractItemViewPrivate::editor созданному виджету устанавливается делегат в качестве обработчика событий. Механизм обработчиков событий я досканально пока не знаю, но возможно это можно будет использовать, если событие переданное обработчику событий является событием для обработчика (охтеж какая конструкция получилась), то можно будет делегату назначить обработчиком таблицу, а для таблицы уже есть обработчик, таким образом событие "всплывет" до нужного обработчика. Проверю, отпишусь. |
|
|
![]() ![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 12.7.2025, 13:05 |