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