例如,考虑一个将Delete键作为快捷键的主菜单项(以Qt :: WindowShortcut作为上下文)。我希望另一个QWidget在聚焦时处理Delete键。这是不可能的,因为Delete键由主菜单处理。我试过在QWidget焦点上抓住键盘,但这并没有做任何事情。这个活动可能吗?
答案 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;
}
如果有更好的方法,我很乐意听到它!