Qt eventFilter的CTRL+TAB快捷方式被进一步处理,即使返回true

Qt eventFilter for CTRL+TAB shortcut is processed further even when true is returned

本文关键字:返回 true 处理 进一步 eventFilter CTRL+TAB 快捷方式 Qt      更新时间:2023-10-16

我试图通过在该区域安装eventFilter来覆盖QMdiAreaCtrl+Tab行为。

我用来测试忽略事件的实现如下:
bool 
MyEventFilterClass::eventFilter(QObject * watched, QEvent * e)
{
  if (e->type() == QEvent::KeyPress || e->type() == QEvent::KeyRelease ||
      e->type() == QEvent::Shortcut || e->type() == QEvent::ShortcutOverride)
  {
    // Ignore all keyboard and shortcut events
    return true;
  }
  return false;
}

我认为忽略所有键和快捷键事件会阻止Ctrl+TabQMdiArea处理,但这是不正确的。即使对所有事件返回true, Ctrl+Tab仍然可以正常工作,尽管下一个活动窗口没有像通常那样突出显示。

请注意,一旦我能够阻止标准行为,我将实现我自己的行为。

如何阻止Ctrl+Tab被处理?

QMdiArea已经使用事件过滤器来捕获Ctrl+Tab,因此您必须创建QMdiArea的派生类并重新定义其eventFilter函数。

由于QMdiArea::eventFilter中有很多其他的东西,不要忘记为你不想阻止或处理的事件回调它。