Я хочу отслеживать, когда нажата клавиша ввода / возврата, а затем сфокусироваться на каком-то другом виджете, но если он не нажат, тогда spinbox должен выполнить обычное действие вместо всего остального. Я создал подкласс QSpinBox и создал защищенное void keyPressEvent (событие QKeyEvent *). Внутри это код:
void MytSpinBox::keyPressEvent(QKeyEvent *event) {
if (event->key() == Qt::Key_Return) {
qDebug() << "return pressed";
editingFinished();
} else {
qDebug() << "Other key";
event->accept();
}
}
Этот код должен работать, но это не так. Я не знаю, в чём дело, но когда я сосредотачиваюсь на продвигаемом spinbox и пытаюсь изменить в нем номер, он просто не работает, я только печатаю отладочное сообщение. Если я нажму клавишу ввода / возврата, то выведу отладочное сообщение и сосредоточусь на каком-то другом виджете, который я установил в editFinished ().
Что я делаю неправильно?
Если вам нужно вызвать обработку события по умолчанию, вам нужно вызвать реализацию базового класса:
void MytSpinBox::keyPressEvent(QKeyEvent *event) {
if (event->key() == Qt::Key_Return) {
qDebug() << "return pressed";
editingFinished();
} else {
QSpinBox::keyPressEvent(event);
}
}
Других решений пока нет …