Я бы предпочел перезаписать keyPressEvent
. Мне не нравится идея QAction
"валяться где-то". Просто переписать keyPressedEvent
. Я обычно делаю это с выключателем, в котором я проверяю нажатую клавишу. Просто не забудьте вызвать keyPressEvent базового класса, если вы не хотите отключать стандартное поведение ключа. Кроме того, вы можете проверить, нажата ли «модификатор», когда происходит keyPressEvent
. (например, Shift или Ctrl). ИМХО для общих целей перезапись keyPressEvent
лучше, чем создание невидимых, секретных действий, если вы не хотите, чтобы ваше приложение содержало все те действия, видимые для пользователя.
void my_widget::keyPressEvent( QKeyEvent* p_event )
{
bool ctrl_pressed = false;
if( p_event->modifiers() == Qt::ControlModifier )
{
ctrl_pressed = true;
}
switch( p_event->key() )
{
case Qt::Key_F:
focus_view();
break;
case Qt::Key_I:
if( ctrl_pressed )
{
toggle_interface();
}
else
{
QWidget::keyPressEvent( p_event );
}
break;
case Qt::Key_Return: // return key
case Qt::Key_Enter: // numpad enter key
update_something();
break;
default:
QSpinBox::keyPressEvent( p_event );
}
}