1

私は PySide で Qt を使用して Python でプログラミングしており、Qt Designer のプロモーション メソッドを使用して windowUi.py の UI に挿入された editor.py というファイルでカスタム QWidget を定義しています。

editor.py で定義されたカスタム QWidget クラスは、Elixir を使用して sqlite3 データベース内のアイテムを編集し、ui ファイル (editor.ui) をインポートする以外にはあまり機能しません。editor.ui 内には、いくつかの QLineEdits ウィジェットと QDateTime ウィジェットがあります。

このウィジェットは、最初はメイン ウィンドウに表示されず、必要に応じて表示されます。ここまではいいのですが、必要のないときに非表示にできないのが問題です。ユーザーがインポートされたエディター ウィジェットではないメイン ウィンドウの他の場所をクリックした場合、つまり、QWidget からフォーカスが移動した場合、ウィジェットは必要ないと判断しました。

私はこの質問を見ました: QWidget focusOutEvent が受信されず、QWidget が実際にフォーカスされていないことに気付きました。

その上で setFocusPolicy(StrongFocus) を呼び出すと、ユーザーが QWidget の背景 (内部のウィジェットではなく) をクリックし、外側をクリックした場合にのみ非表示にすることができます。

問題は、ユーザーがこのウィジェットの外側をクリックして、その内側にある QLineEdit または QDateTime から別のものにフォーカスを移したときに、QWidget が非表示になるようにするにはどうすればよいかということです。

4

1 に答える 1

1

必要なことをしませQApplication:::focusChanged ( QWidget * old, QWidget * now )んか?QWidget *nowがQLineEdits/QDateTime の 1 つであるかどうかを確認できます (fe で上に移動しますQObject::parent)
。表示する前にこの信号に接続し、非表示にした後に切断するだけです。

于 2012-12-20T12:06:03.760 に答える