2014-12-17 2 views
1

Например, рассмотрите элемент главного меню, который имеет клавишу Delete в качестве ярлыка (с Qt :: WindowShortcut в качестве контекста). Я хочу, чтобы другой QWidget обрабатывал ключ Delete при фокусировке. Это невозможно, потому что клавиша Delete обрабатывается главным меню. Я попытался захватить клавиатуру в фокусе QWidget, но это ничего не делает. Возможно ли это событие?Как вы подавляете ярлык клавиш главного меню Qt?

+0

У вас есть доступ к коду главного меню? –

+0

Не совсем. Я мог бы использовать window(), но это не гарантия. –

ответ

2

Мне удалось получить поведение, которое я хотел, установив фильтр событий на 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; 
} 

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