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

QWidgetoverrideを使用する代わりにkeyPressEvent、次を使用できますQShortcut

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 に答える