2

我正在开发一个应用程序,我希望某个击键(让我们说Tab这个例子的键)始终由特定的QWidget. 假设我有这样的层次结构:

QWidget (top level window)
  ¬ QWidget X (the widget that should handle all Tab presses)
  ¬ QWidget (inner widget)
    ¬ ...
      ¬ ...
        ¬ QLineEdit (very deep into the hierarchy)

当前QLineEdit有焦点,您可以在其中输入文本。当用户按下Tab时,我希望它由QWidget X(接近层次结构的最顶层)处理,以执行某些操作。如果当前窗口中的任何内容具有焦点,我如何确保特定的 QWidget 拦截每个Tab按键?

为每个孩子安装事件过滤器QWidget是不切实际的,因为应用程序非常庞大且容易更改。

4

1 回答 1

0

您可以使用而不是QWidget覆盖:keyPressEventQShortcut

QShortcut *Shortcut = new QShortcut(this);
Shortcut->setKey(Qt::Key_Tab);
connect(Shortcut, SIGNAL(activated()), this, SLOT(TabPressed()));

然后在TabPressed()槽中,执行动作。无论任何其他人QWidget有焦点,这都有效。

于 2013-08-22T13:13:34.777 回答