Здравствуйте, гость ( Вход | Регистрация )
Denis.Rassvetniy | Дата 19.11.2011, 22:17 |
Как вариант можно создать делегат, например FilteredItemDelegate, наследующийся от QItemDelegate. При создании этого делегата передавать ему ссылку на виджет-перехватчик (QWidget *pFilter), который будет фильтровать события, а в методе createEditor() вызывать installEventFilter(pFilter) для создаваемого эдитора. | |
alzasr | Дата 19.10.2011, 13:06 |
У QTableWidget есть массив cellWidget, который содержит созданные виджеты ячеек. Им можно назначать eventFilter. Вопрос решен. | |
alzasr | Дата 18.10.2011, 7:49 |
Из того что нашел в исходниках. Экземпляр виджета редактирования создается в методе QWidget *QAbstractItemViewPrivate::editor, который возвращает ссылку на созданый метод. Этот метод используется в void QAbstractItemView::openPersistentEditor вот в этом куске
и сохраняется в d, что это за класс пока не знаю, но он недоступен из потомка QTableWidget. Вообще в QAbstractItemViewPrivate::editor созданному виджету устанавливается делегат в качестве обработчика событий. Механизм обработчиков событий я досканально пока не знаю, но возможно это можно будет использовать, если событие переданное обработчику событий является событием для обработчика (охтеж какая конструкция получилась), то можно будет делегату назначить обработчиком таблицу, а для таблицы уже есть обработчик, таким образом событие "всплывет" до нужного обработчика. Проверю, отпишусь. |
|
alzasr | Дата 17.10.2011, 15:29 |
Почитав маны нашел, что при редактировании делегатом создается виджет, который и отображается. Как вариант можно создать свой делегат со своим виджетом, который и будет сигнализировать о событии нажатия клавиши. Но мне кажется есть другой способ, более элегантный. У делегата есть метод создающий виджет и возвращающий ссылку на него QWidget *createEditor. У виджета есть installEventFilter. Нужно наследоваться от QTableWidget и переопределить метод, вызывающий createEditor у делегата и назначать созданному виджету фильтр событий. Вопрос теперь такой: какой метод надо переопределять? Если кто-нибудь знает, ответьте, я пока буду исходники читать. | |
alzasr | Дата 17.10.2011, 14:25 |
Мне нужно перехватывать все нажатия клавиш в QTableWidget и после анализа либо что-то сделать (в основном изменить фокус ввода) либо передать событие дальше на обработку. Погуглив нашел 2 варианта. 1. Насловаться от QTableWidget, переопределить keyPressEvent 2. использовать eventFilter Опробовал оба способа, но не все клавиши перехватываются. При редактировании ячейки не реагирует на нажатие стрелок влево-вправо, а вверх-вниз все норм. Я так понимаю, что какой-то виджет, отвечающий за ячейку, перехватывает события и если события ей подходят, то прерывают цепочку. У QTableWidgetItem нет installEventFilter и keyPressEvent, как я понял по исходникам это не QWidget. Подскажите, где копать или где я неправ. |
|
Просмотр темы полностью (откроется в новом окне) | |
Текстовая версия | Сейчас: 5.5.2024, 21:47 |