タブキーを押すと、別のウィジェットにフォーカスが変わります。 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. ListViewがフォーカスを失った
- 2. wp10:フライアウトが発生していないテキストボックスがフォーカスを失ったときにフォーカスを失った
- 3. ポップアップがフォーカスを失ったときにデータを保存する
- 4. Extjsグリッドがフォーカスを失ったときの検出方法
- 5. NSTableViewテーブルがフォーカスを失ったときのハイライトカラー
- 6. フォーカスを失ったときのSearchViewの折りたたみ(サポートライブラリ)
- 7. WKInterfaceSliderがWKCrownSequencerフォーカスを失ったときにコールバックを取得
- 8. フォーカスが失われたときのオートコンプリートチェック
- 9. フォーカスを失ったときにng-blurがトリガーされない
- 10. フォーカスを失ったときにフェードエフェクトのリフレッシュを繰り返す
- 11. TextFieldがフォーカスを失ったときにChangeListenerをトリガーする方法は? JAVAFX
- 12. NSTextViewがフォーカスを失ったとき、どのように知ることができますか?
- 13. wpf listviewがフォーカスを失った
- 14. VB6 - コンボボックスがフォーカスを失った
- 15. nsisでテキストボックスがフォーカスを失ったときにイベントを呼び出す方法
- 16. ビューがフォーカスを失ったときにEditTextのテキストをマスクする方法。
- 17. 私のアプリケーションがQtでフォーカスを失ったことを検出するには?
- 18. GPS信号が警告の通知を失った
- 19. 選択したテキストが1つのテキストボックスでフォーカスを失った
- 20. フォーカスを失ったときにScrollToCaretがnull参照例外をスローする
- 21. 要素がフォーカスを失ったときにJavaScriptを実行する
- 22. javafxモーダルダイアログがフォーカスを失ったときにタスクバーのアプリケーションアイコンを点滅
- 23. Winforms TextBoxのフォーカスを失ったイベント?
- 24. in Angular2 ANYフォーム入力フィールドがフォーカスを失ったときを知る方法
- 25. EditTextがフォーカスを失ったときは、どうすればわかりますか?
- 26. Windows 10上でのUWPのデスクトップアクセス時にアプリケーションがフォーカスを失ったときに失われる
- 27. kde4/plasmaのウィジェットとは何ですか?
- 28. WPF ComboBoxはフォーカスを失ったときにドロップダウンを縮めません
- 29. フォーカスが失われたときにウィンドウがちらつきますか?
- 30. Javascriptフィルタのフォーカスが失われたのはなぜですか
'QLineEdit'フォーカスを失うことに興味があるなら、' QLineEdit :: editingFinished() 'シグナルはそのイベントを捕捉します。 – waldyrious