Например, рассмотрите элемент главного меню, который имеет клавишу Delete в качестве ярлыка (с Qt :: WindowShortcut в качестве контекста). Я хочу, чтобы другой QWidget обрабатывал ключ Delete при фокусировке. Это невозможно, потому что клавиша Delete обрабатывается главным меню. Я попытался захватить клавиатуру в фокусе QWidget, но это ничего не делает. Возможно ли это событие?Как вы подавляете ярлык клавиш главного меню Qt?
1
A
ответ
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;
}
Если есть лучший способ, я бы хотел его услышать!
У вас есть доступ к коду главного меню? –
Не совсем. Я мог бы использовать window(), но это не гарантия. –