Seite 1 von 1

[Gelöst] Erkennen, ob ein ChildWidget den Focus verliert?

Verfasst: 10. Oktober 2012 18:45
von bobcat
Hallo,

ich habe ein QDockWidget, in dem sich einige Eingabewidgets befinden, also QLineEdits, QSpinBoxes etc. Über diese Widgets gebe ich Konfigurationseinstellungen für mein Programm ein. Ich möchte nun erreichen, dass die Eingaben automatisch übernommen werden (also ohne dass der Nutzer einen "Übernehmen" Button klicken muss), wenn ich an eine Stelle außerhalb meines QDockWidgets klicke, also z.B. in ein anderes DockWidget, den MenuBar, das CentralWidget, oder am besten auch in eine völlig andere Anwendung. Ich frage mich also, wie ich mitbekomme, dass der Nutzer woanders hingeklickt hat, ohne, dass ich für jede der anderen Stellen ein QWidget::focusInEvent() abfangen muss.

Ich habe versucht, ein Signal des QDockWidgets abzufangen, wenn eines der im QDockWidget enthaltenen ChildWidgets nach einer Eingabe wieder den Focus verliert, habe aber nichts passendes gefunden. Ebensowenig erfolgreich war der Versuch, für das im QDockWidget enthaltene top level Widget das QWidget::focusOutEvent() zu beutzen, da das ja nur für ein untergeordnetes Widget (z.B. QSpinBox) aufgerufen wird.

Für eine Idee, wie man das einfach erreichen könnte, wäre ich sehr dankbar.

Re: Erkennen, ob ein ChildWidget den Focus verliert?

Verfasst: 11. Oktober 2012 09:28
von brax
Schau Dir mal die Methode eventFilter(QObject* pObj,QEvent* e) (und installEventFilter) an. Wenn Du die in Deinem DockWidget implementierst und es an allen Childwidgets als Eventfilter registrierst, kannst Du das damit machen.

Re: Erkennen, ob ein ChildWidget den Focus verliert?

Verfasst: 24. November 2012 00:35
von bobcat
Mein ursprünglicher Ansatz, das Problem zu lösen, ging nicht wirklich in dir richtige Richtung. Ich hab's jetzt so umgesetzt, dass ich für jedes Eingabewidget das Signal anfange, wenn sich was am eingegebenen Inhalt geändert hat. So kann ich auf jede einzelne Eingabe direkt reagieren. Ich fange also Signale ab wie z.B. textChanged(), valueChanged(), ...