Как подавить сочетание клавиш в главном меню 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;
}

Если есть лучший способ, я хотел бы услышать это!

Другие вопросы по тегам