ボタンをダブルクリックすると、そのボタンのテキストを編集できるカスタムQtボタンを作成しています。ボタンをダブルクリックすると、QLineEditが表示され、ボタン上のテキストによってボタン上のテキストを編集できます。私の要件は、ユーザーがアプリケーションウィンドウ内のどこかをクリックすると、QLineEditが消えて編集操作がキャンセルされるということです。これは場合によっては機能します。具体的には、テキスト入力が可能なものをクリックすると動作します。ウィンドウの他の部分が期待通りに機能しません。アプリケーションウィンドウの空白部分をクリックすると、QLineEditはそのフォーカスを保持します。このような場合、どうすればその焦点を取り除くことができますか?QLineEditからQLineEditのフォーカスを削除する方法
答えて
私はまだ動作しているようですが、他のオプションがある場合はまだ開いていますが、解決策を見つけました。私はPyQt4を使用していますので、私の例はPythonで書かれています:
新しいタイプがあるので、QLineEditのサブクラスを作成してください。私はすべてのQLineEditインスタンスでこの動作を必要としたくないです。これらの特定のものだけ。
class MyLineEdit(QtGui.QLineEdit):
pass
私のQMainWindowサブクラスでは、mousePressEvent()
の実装よりも優先されます。現在フォーカスのあるウィジェットを取得します。そのウィジェットのタイプがMyLineEdit
の場合は、フォーカスをクリアします。
class MyMainWindow(QtGui.QMainWindow):
def ...
def mousePressEvent(self, event):
focused_widget = QtGui.QApplication.focusWidget()
if isinstance(focused_widget, MyLineEdit):
focused_widget.clearFocus()
QtGui.QMainWindow.mousePressEvent(self, event)
def ...
ユーザーがアプリケーションのウィンドウの任意の場所をクリックすると、フォーカスがクリアされるように、これは私に求めている動作を取得します。
編集:これには1つの注意点があります。私はQTreeView
をメインウィンドウに持っています。ユーザーがツリービューをクリックすると、テキスト編集フィールドからフォーカスが削除されません。
親ウィジェットのclicked()シグナルをキャッチし、yourLabel->clearFocus()(残念ながらスロットではないので状況がより複雑になります)を呼び出します。
yourLabel-> clearFocus()を呼び出す独自のスロットを定義することはあまり複雑ではありません。 :) – Exa
残念なことに、これは、含まれているウィジェットの内部をクリックした場合にのみ機能します。必要に応じて、他の多くのウィジェットを含むウインドウ上の他の場所ではありません。 –
私はここグラントLimberg命令に従ったが、私の場合には、簡単なことを考え出し:
QApplication.focusWidget().clearFocus()
は、問題を修正します。私はおそらく、editingFinished()
代わりのreturnPressed()
を使用しますが、私はtextChanged(QString)
を使用していないだろう。この特定のケースでは
connect(myWidgets->MyLineEdit, SIGNAL(returnPressed()), this, SLOT(onLineEditDone());
void onLineEditDone()
{
myWidgets->MyLineEdit->clearFocus();
}
:Cにすれば
は++私はの線に沿って何かをするだろう。
- 1. qlineeditから値を取得
- 2. QLineEditの問題
- 3. Qt4.5でQLineEditのフォーカスを取得するには
- 4. マスクQLineEditテキスト
- 5. QtでQlineEditをカスタマイズする
- 6. QLineEditの背景を進行中のバーにする方法
- 7. pyqtでQLineEditのユーザー入力を制限する方法
- 8. 発行QLineEditをQGraphicsSceneにレンダリング
- 9. QLineEdit可視幅の設定?
- 10. Qt 4.5 QLineEditでフォーカスが機能しない
- 11. QLineEditでフレームの色を変更する
- 12. Qt4 QLineEditウィジェットなどでフォーカスイベントをキャプチャする方法
- 13. 無効なQLineEditウィジェットをナビゲートする方法は?
- 14. 検索フォームのQMessageBoxにQLineEditを含める方法
- 15. QLineEditの背景に水平グラデーションを割り当てる方法
- 16. にQLineEdit桁区切り
- 17. QLineEditにマウスイベントを追加するには
- 18. ウィンドウにQLineEditを表示するには?
- 19. QLineEdit:複数のQLineEditウィジェットをイベントハンドラで区別するためのエレガントなソリューションはありますか?
- 20. QLineEditフォーカスで描画されるデフォルトの青い枠線を回避する方法
- 21. qtcreator(デザイナー)のqtoolbarにQLineEditを追加
- 22. どのQLineEditがシグナルハンドラ内でeditingFinished()を発行したかを知る方法は?
- 23. QLineEditボックスにテキストを追加するQPushButtonsを作成する方法は?
- 24. どのようにQLineEditがインデックス
- 25. QCompleterなしでQLineEditからドロップダウンメニューを作成する標準的な方法はありますか?
- 26. QLineEditからQtのカスタムスロットにvalueChanged信号を接続するには
- 27. QLineEditの "enter"イベントをスロットにリンクしていますか?
- 28. QtのQLineEditにsetValidator()とsetInputMask()を使用するには?
- 29. QtでQLineEditのイベントをクリックするには?
- 30. QLineEditをエディタとして使用しているときに、QLineEditのサイズを変更するにはどうすればよいですか?
+1 'clearFocus()'は私が必要としたものです。ありがとう! –