2

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

4

1 回答 1

3

我能够通过在 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;
}

如果有更好的方法,我很想听听!

于 2014-12-17T19:49:45.317 回答