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