在所有情况下都将keyPressEvent传播到顶级窗口小部件

时间:2013-08-22 12:52:09

标签: c++ qt keyboard

我正在开发一个应用程序,我想要一个特定的按键(让我们说这个例子的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上安装事件过滤器是不切实际的,因为应用程序非常庞大且容易发生变化。

1 个答案:

答案 0 :(得分:0)

您可以使用QWidget代替keyPressEvent覆盖QShortcut,而不是{/ 1}}:

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

然后在TabPressed()位置执行操作。无论任何其他QWidget有焦点,这都有效。