Как подавить сочетание клавиш в главном меню Qt?
Например, рассмотрим пункт главного меню, в котором клавиша Delete является ярлыком (с Qt::WindowShortcut в качестве контекста). Я хочу, чтобы другой QWidget обрабатывал клавишу Delete, когда сфокусирован. Это невозможно, поскольку клавиша Delete обрабатывается главным меню. Я пытался схватить клавиатуру на фокус QWidget, но это ничего не делает. Возможно ли это событие?
1 ответ
Решение
Я смог получить желаемое поведение, установив фильтр событий в qApp, когда QWidget сфокусирован (удаляем его, когда терял фокус), и вернул true для всех типов QEvent::Shortcut.
void MyWidget::focusInEvent( QFocusEvent *event )
{
qApp->installEventFilter(this);
}
void MyWidget::focusOutEvent( QFocusEvent *event )
{
qApp->removeEventFilter(this);
}
bool MyWidget::eventFilter( QObject *target, QEvent *event )
{
if (event->type() == QEvent::Shortcut)
{
// If I care about this shortcut, then return true to intercept
// Else, return false to let the application process it
}
return false;
}
Если есть лучший способ, я хотел бы услышать это!