2013-06-19 4 views
0

Я хочу отслеживать, когда нажата клавиша ввода/возврата, а затем сфокусироваться на каком-то другом виджете, но если он не нажат, а spinbox должен принять нормальное действие, а не что-либо еще. Я подклассифицировал QSpinBox и создал защищенное void keyPressEvent (событие QKeyEvent *). Внутри этого кода:Qt5 C++: подклассификация QSpinBox и keyPressEvent не будут работать

void MytSpinBox::keyPressEvent(QKeyEvent *event) { 
    if (event->key() == Qt::Key_Return) { 
     qDebug() << "return pressed"; 
     editingFinished(); 
    } else { 
     qDebug() << "Other key"; 
     event->accept(); 
    } 
} 

Этот код должен работать, но это не так. Я не знаю, что не так, но когда я сосредотачиваюсь на продвинутой спинбоке и пытаюсь изменить число в ней, это просто не сработает, я получаю только отладочное сообщение. Если я нажимаю клавишу ввода/возврата, то печатаю сообщение отладки и фокусируюсь на другом виджетах, которые я установил в editFinished().

Что я делаю неправильно?

+1

ли все из вашего кода это? Вы не называете реализацию базового класса ('QSpinBox :: keyPressEvent (event)'), что, разумеется, разрывает вашу спинбокс. – peppe

ответ

4

Если вам нужно вызвать обработку по умолчанию в случае, вам нужно вызвать реализацию базового класса:

void MytSpinBox::keyPressEvent(QKeyEvent *event) { 
    if (event->key() == Qt::Key_Return) { 
     qDebug() << "return pressed"; 
     editingFinished(); 
    } else { 
     QSpinBox::keyPressEvent(event); 
    } 
} 
+0

большое спасибо! :) – user1257255