你如何压制Qt主菜单键盘快捷键?

时间:2014-12-17 19:00:16

标签: qt keyboard-shortcuts qwidget qmenu

例如,考虑一个将Delete键作为快捷键的主菜单项(以Qt :: WindowShortcut作为上下文)。我希望另一个QWidget在聚焦时处理Delete键。这是不可能的,因为Delete键由主菜单处理。我试过在QWidget焦点上抓住键盘,但这并没有做任何事情。这个活动可能吗?

1 个答案:

答案 0 :(得分:2)

当QWidget聚焦时,我可以通过在qApp上安装事件过滤器来获得我想要的行为(当失去焦点时将其删除),并为所有QEvent :: Shortcut类型返回true。

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;
}

如果有更好的方法,我很乐意听到它!