我想在我的主窗口中拦截 Tab 按键以防止Qt切换焦点。这是我到目前为止所尝试的内容:
bool CMainWindow::event(QEvent * e)
{
if (e && e->type() == QEvent::KeyPress)
{
QKeyEvent * keyEvent = dynamic_cast<QKeyEvent*>(e);
if (keyEvent && keyEvent->key() == Qt::Key_Tab)
return true;
}
return QMainWindow::event(e);
}
这不起作用,当我按 Tab 时,不会调用event
。如何实现我的目标?
答案 0 :(得分:7)
我发现避免焦点更改的最优雅的方法是重新实现从QWidget派生的类bool focusNextPrevChild(bool next)
并简单地返回FALSE
。如果您想允许,请返回TRUE
。
与其他键一样,您现在也可以使用Qt::Key_Tab
keyPressEvent(QKeyEvent* event)
答案 1 :(得分:2)
重新实现virtual bool QApplication::notify(QObject * receiver, QEvent * e)
并粘贴我的问题中的代码。
答案 2 :(得分:2)
您可以使用QWidget的setFocusPolicy( Qt::NoFocus)
属性来实现。您可以在窗口小部件上设置不需要标签焦点的焦点策略。我认为事件处理程序没有调用的原因,因为Tab是由Qt框架内部管理的。请参阅QWidget::setTabOrder
API,这是静态的。
答案 3 :(得分:-1)
您需要在主窗口上安装事件过滤器才能接收事件。您可以使用installEventFilter方法。 另一种选择是覆盖keyPressEvent方法来处理按键操作。