crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

alzasr
  опции профиля:
сообщение 17.10.2011, 14:25
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 21
Регистрация: 6.10.2011
Пользователь №: 2926

Спасибо сказали: 0 раз(а)




Репутация:   0  


Мне нужно перехватывать все нажатия клавиш в QTableWidget и после анализа либо что-то сделать (в основном изменить фокус ввода) либо передать событие дальше на обработку.
Погуглив нашел 2 варианта.
1. Насловаться от QTableWidget, переопределить keyPressEvent
2. использовать eventFilter

Опробовал оба способа, но не все клавиши перехватываются. При редактировании ячейки не реагирует на нажатие стрелок влево-вправо, а вверх-вниз все норм. Я так понимаю, что какой-то виджет, отвечающий за ячейку, перехватывает события и если события ей подходят, то прерывают цепочку. У QTableWidgetItem нет installEventFilter и keyPressEvent, как я понял по исходникам это не QWidget. Подскажите, где копать или где я неправ.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
alzasr
  опции профиля:
сообщение 18.10.2011, 7:49
Сообщение #2


Студент
*

Группа: Участник
Сообщений: 21
Регистрация: 6.10.2011
Пользователь №: 2926

Спасибо сказали: 0 раз(а)




Репутация:   0  


Из того что нашел в исходниках. Экземпляр виджета редактирования создается в методе QWidget *QAbstractItemViewPrivate::editor, который возвращает ссылку на созданый метод. Этот метод используется в void QAbstractItemView::openPersistentEditor вот в этом куске
QWidget *editor = d->editor(index, options);
    if (editor) {
        editor->show();
        d->persistent.insert(editor);
    }

и сохраняется в d, что это за класс пока не знаю, но он недоступен из потомка QTableWidget.
Вообще в QAbstractItemViewPrivate::editor созданному виджету устанавливается делегат в качестве обработчика событий. Механизм обработчиков событий я досканально пока не знаю, но возможно это можно будет использовать, если событие переданное обработчику событий является событием для обработчика (охтеж какая конструкция получилась), то можно будет делегату назначить обработчиком таблицу, а для таблицы уже есть обработчик, таким образом событие "всплывет" до нужного обработчика. Проверю, отпишусь.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 12.7.2025, 13:05