【问题标题】:How do you suppress a Qt main menu keyboard shortcut?如何抑制 Qt 主菜单键盘快捷键?
【发布时间】:2014-12-17 19:00:15
【问题描述】:

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

【问题讨论】:

  • 你可以访问主菜单的代码吗?
  • 并非如此。我可以使用 window(),但这不是保证。

标签: qt keyboard-shortcuts qwidget qmenu


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2011-12-01
    • 2014-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-26
    • 2017-08-09
    相关资源
    最近更新 更多