タブキーを押すと、別のウィジェットにフォーカスが変わります。 Qtでは、ウィジェットがフォーカスを失ったときのシグナルはありますか?入力を有効にするかどうかを確認するために使用できますか?そうでない場合は、フォーカスを元に戻して、ユーザーに再入力を要求することはできますか?ウィジェットがフォーカスを失ったときの信号は何ですか?
答えて
ウィジェットのフォーカスが失われたことを知りたい場合は、ウィジェット内でvoid QWidget::focusOutEvent(QFocusEvent* event)
をオーバーライドして再実装してください。ウィジェットがフォーカスを失ったときに呼び出されます。ウィジェットにフォーカスを当てるには、QWidget::setFocus(Qt::FocusReason)
を使います。
QLineEdit
に入力を検証するために、または
QComboBox
あなたは
QValidator
をサブクラス化し、独自のバリデータを実装する、または既存のサブクラスの1、
QIntValidator
、
QDoubleValidator
、または
QRegExpValidator
を使用することができます。バリデータを
QLineEdit::setValidator(const QValidator*)
と
QComboBox::setValidator(const QValidator*)
にそれぞれ設定します。
あなたはモーダルダイアログボックスの内容を確認したい場合は、一つの方法は、このような実装でQDialog::exec()
を上書きするために、次のようになります。
int MyDialog::exec() {
while (true) {
if (QDialog::exec() == QDialog::Rejected) {
return QDialog::Rejected;
}
if (validate()) {
return QDialog::Accepted;
}
}
}
bool MyDialog::validate() {
if (lineEdit->text().isEmpty()) {
QMessageBox::critical(this, "Invalid value", "The specified value is not valid");
lineEdit->setFocus();
lineEdit->selectAll();
return false;
}
return true;
}
それは、ユーザがOKでダイアログを閉じることができません。ダイアログの内容が正常に検証されない限り、[Accepted]ロールを持つ他のボタンをクリックします。この例では、ダイアログにはというQLineEdit
という名前が付けられており、その内容は空でないことが確認されます。validate
関数はその内容が空でないことを確認します。表示されている場合は、フォーカスをQLineEdit
に設定し、ダイアログを再度表示します。
実際には、シグナル['QApplication :: focusChanged'](http://qt-project.org/doc/qt-5.0/qtwidgets/qapplication.html#focusChanged)があります。 – sashoalm
[sashoalm](https://stackoverflow.com/users/492336/sashoalm)の潔白なコメントは、受け入れられる回答でなければなりません。もちろん、それはそのようには動作しません。 [この重複した質問]の[この類似の回答](https://stackoverflow.com/a/321677/2809027)[https://stackoverflow.com/questions/321656/get-a-notification-event-signal -w -a-qt-widget-gets-focus)を使用してください。 '' –
class FocusWatcher : public QObject
{
Q_OBJECT
public:
explicit FocusWatcher(QObject* parent = nullptr) : QObject(parent)
{
if (parent)
parent->installEventFilter(this);
}
virtual bool eventFilter(QObject *obj, QEvent *event) override
{
Q_UNUSED(obj)
if (event->type() == QEvent::FocusIn)
emit focusChanged(true);
else if (event->type() == QEvent::FocusOut)
emit focusChanged(false);
return false;
}
Q_SIGNALS:
void focusChanged(bool in);
};
(MOCを含めることを忘れないでください).cppファイルでは自分で
を信号を作成することも可能(かつ簡単)であり、それを接続するために:
connect(new FocusWatcher(myWidget), &FocusWatcher::focusChanged, this, &View::doSomething);
- 1. Extjsグリッドがフォーカスを失ったときの検出方法
- 2. フォーカスが失われたときのオートコンプリートチェック
- 3. フォーカスを失ったときにng-blurがトリガーされない
- 4. wpf listviewがフォーカスを失った
- 5. NSTextViewがフォーカスを失ったとき、どのように知ることができますか?
- 6. nsisでテキストボックスがフォーカスを失ったときにイベントを呼び出す方法
- 7. GPS信号が警告の通知を失った
- 8. 私のアプリケーションがQtでフォーカスを失ったことを検出するには?
- 9. 選択したテキストが1つのテキストボックスでフォーカスを失った
- 10. 要素がフォーカスを失ったときにJavaScriptを実行する
- 11. Winforms TextBoxのフォーカスを失ったイベント?
- 12. in Angular2 ANYフォーム入力フィールドがフォーカスを失ったときを知る方法
- 13. EditTextがフォーカスを失ったときは、どうすればわかりますか?
- 14. フォーカスが失われたときにウィンドウがちらつきますか?
- 15. 私のアプリケーションがVB.NETでフォーカスを失ったことを知る方法
- 16. フォーカスが失われたときのAutoCompleteTextViewの問題
- 17. WPF:ウィンドウのフォーカスが失われたときの検出
- 18. ウィンドウがフォーカスを失ったときに、ゲームが一時停止するのをプログラムで防止することはできますか?
- 19. Qt信号が値を返すことはできますか?
- 20. kde4/plasmaのウィジェットとは何ですか?
- 21. C#サーバーがフォーカスを失ったときにクライアントが接続した場合のサーバーの終了/クラッシュ
- 22. フォーカスが失われたときにテキストフィールドから先行ゼロを削除する
- 23. ページがフォーカスを失ったときにsetInterval()メソッドを使用したjQueryギャラリーが正しく動作しない
- 24. フォーカスが失われたフォーカスを検出しました
- 25. ウェブページにフォーカスが当たったときのイベント
- 26. フィールドのフォーカスが失われたときにjQueryオートコンプリートを停止する
- 27. スリックグリッドのフォーカスが失われたときにアクティブなセルを削除します。
- 28. Pyqt:QLineEditがフォーカスしているという信号を得るには?
- 29. PhonegapベースのAndroidアプリがフォーカスを失ったときにJavascriptを使用して検出する方法
- 30. 私は信号を送るときにマシンの内部で何が起こるのですか
'QLineEdit'フォーカスを失うことに興味があるなら、' QLineEdit :: editingFinished() 'シグナルはそのイベントを捕捉します。 – waldyrious