0

私の複雑な GUI は、多数のネイティブ ウィジェットとカスタム ウィジェットで構成されています。それらのほとんどにはまったくフォーカスがありません (私はそれを必要としません: たとえば、ユーザーの入力を必要としない一部の表示専用ウィジェット)。

QLineEditGUI がユーザーに何らかの文字列を入力するように要求しているときに、画面に表示されることがあります (F2 を押した後のウィンドウのエクスプローラーで、ファイルが選択されている (名前の変更) ことを想像してください) 。

ユーザーができるQLineEdit限り多くの方法でこれを閉じることができるようにしたい: Enter、ESC、QLineEdit の外側をクリックする。

  1. QLineEdit状況によってはシグナルを送信editingFinished()します (Enter キーを押し、別のウィジェットをクリックします)。
  2. また、発生時にシグナルQLineEditを送信する新しいクラスを派生させることもできます。editingFinished()focusOutEvent(QFocusEvent *)
  3. そのクラスでは、ESC キーをキャッチしてeditingFinished().

唯一の問題は、QLineEdit別のウィジェットがフォーカスを取得した場合にのみフォーカスを失うことです。したがって、フォーカスを気にしないウィジェットをクリックすると、フォーカスを維持し、シグナルQLineEditを送信しません。editingFinished()

4

1 に答える 1

1

lineEditsおそらく、マウス クリックが発生したときにカスタム イベントをすべてのアプリに送信する、アプリ全体のイベント フィルターをインストールする必要があります。次に、 で、そのカスタム イベントがアクティブであるか、フォーカスがあるかどうかをチェックするクラスlineEditを実装QObject::event()します。lineEdit

次のようなフィルターのドキュメントを指す回答を書きました。

Qt モディファイヤ キー リリースのキャッチ

それが役立つことを願っています。

于 2013-03-20T01:17:40.683 に答える