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

时间:2011-10-05 09:54:44

标签: c++ qt mdi

我正试图通过在该区域安装QMdiArea来覆盖eventFilter Ctrl + 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 + Tab QMdiArea处理,但这不正确。即使为所有事件返回true, Ctrl + Tab 仍然可以正常工作,尽管下一个活动窗口没有正常显示。

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

如何阻止 Ctrl + Tab 被处理?

1 个答案:

答案 0 :(得分:1)

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

由于QMdiArea::eventFilter中还有很多其他内容,所以不要忘记为不想阻止或处理的事件调用它。