Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Magseven от Ноябрь 17, 2015, 12:53



Название: (РЕШЕНО) Не получается отследить нажатие Key_Tab
Отправлено: Magseven от Ноябрь 17, 2015, 12:53
Добрый день!

Вроде бы простая задача, но никак не получается отследить нажатие клавиши Key_Tab в QComboBox.
Фрагмент кода:

bool MyForm::event( QEvent* event) {
    if ( event->type() != QEvent::KeyPress)
        return QWidget::event( event);

    QKeyEvent *keyEvent = dynamic_cast<QKeyEvent *>(event);
    if ( !keyEvent)
        return QWidget::event( event);

    switch ( keyEvent->key()) {
        case Qt::Key_Tab:
            return true;
    }

    return QWidget::event( event);
}

Подскажите, пожалуйста, что делаю не так?



Название: Re: Не получается отследить нажатие Key_Tab
Отправлено: gil9red от Ноябрь 17, 2015, 14:51
Проверял, работает, Qt 4

UPDATE. Ааа, так вы у самого комбобокса пытаетесь отследить нажатие :)
Реализовал как у вас: странно на KeyPress не ловит, а на KeyRelease ловит... Как вариант, используйте keyPressEvent


Код
Python
class ComboBox(QComboBox):
   def __init__(self):
       super().__init__()
 
   def event(self, e):
       # print(e, e.type())
 
       if e.type() == QEvent.KeyRelease:
           print('ComboBox', e.key(), e.key() == Qt.Key_Tab)
           return True
 
       return super().event(e)
 
 
class Widget(QWidget):
   def __init__(self):
       super().__init__()
 
       layout = QVBoxLayout()
       self.setLayout(layout)
 
       self.cb = ComboBox()
       self.cb.addItem('1')
       self.cb.addItem('2')
       self.cb.addItem('3')
       self.cb.addItem('4')
 
       layout.addWidget(self.cb)
 
       self.cb.installEventFilter(self)
 
   def eventFilter(self, obj, event):
       if obj is self.cb and event.type() == QEvent.KeyPress:
           print(event.key(), event.key() == Qt.Key_Tab)
           return True
 
       return super().eventFilter(obj, event)
 


Название: Re: Не получается отследить нажатие Key_Tab
Отправлено: Swa от Ноябрь 17, 2015, 14:53
Сигнал о нажатии кнопки получает комбобокс, а этот метод принадлежит форме. Комбобокс поглощает нажатие и форма о нём ничего не знает.
Читайте вот это (http://doc.qt.io/qt-5/eventsandfilters.html) и вот это (http://doc.qt.io/qt-5/qobject.html#installEventFilter).


Название: (РЕШЕНО) Не получается отследить нажатие Key_Tab
Отправлено: Magseven от Ноябрь 19, 2015, 09:26
Спасибо за помощь! Разобрался!


Название: Re: (РЕШЕНО) Не получается отследить нажатие Key_Tab
Отправлено: gil9red от Ноябрь 19, 2015, 11:30
Спасибо за помощь! Разобрался!

Как решили сделать? :)