Russian Qt Forum
Апрель 24, 2024, 02:17 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: (РЕШЕНО) Не получается отследить нажатие Key_Tab  (Прочитано 3316 раз)
Magseven
Новичок

Offline Offline

Сообщений: 25


Просмотр профиля
« : Ноябрь 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);
}

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

« Последнее редактирование: Ноябрь 19, 2015, 09:27 от Magseven » Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #1 : Ноябрь 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)
 
« Последнее редактирование: Ноябрь 17, 2015, 14:59 от gil9red » Записан

Swa
Самовар
**
Offline Offline

Сообщений: 170


Просмотр профиля
« Ответ #2 : Ноябрь 17, 2015, 14:53 »

Сигнал о нажатии кнопки получает комбобокс, а этот метод принадлежит форме. Комбобокс поглощает нажатие и форма о нём ничего не знает.
Читайте вот это и вот это.
Записан
Magseven
Новичок

Offline Offline

Сообщений: 25


Просмотр профиля
« Ответ #3 : Ноябрь 19, 2015, 09:26 »

Спасибо за помощь! Разобрался!
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #4 : Ноябрь 19, 2015, 11:30 »

Спасибо за помощь! Разобрался!

Как решили сделать? Улыбающийся
Записан

Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.069 секунд. Запросов: 22.