33

ダイアログでtabキーを押すと、フォーカスが別のウィジェットに変わります。Qt では、ウィジェットがフォーカスを失ったときのシグナルはありますか? 入力が有効かどうかを確認するために使用できますか? そうでない場合、フォーカスを戻して、ユーザーに再入力を求めることはできますか?

4

2 に答える 2

11

自分でシグナルを作成することも可能です (そして簡単です)。

.cpp 内 (moc を含めることを忘れないでください)

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);
};

そしてそれを接続するには:

connect(new FocusWatcher(myWidget), &FocusWatcher::focusChanged, this, &View::doSomething);
于 2015-12-12T09:06:58.377 に答える