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

Alles rund um die Programmierung mit Qt
Antworten
bobcat
Beiträge: 125
Registriert: 21. April 2010 14:51

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

Beitrag 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.
Zuletzt geändert von bobcat am 24. November 2012 00:36, insgesamt 1-mal geändert.
brax
Beiträge: 208
Registriert: 11. Mai 2010 11:22

Re: Erkennen, ob ein ChildWidget den Focus verliert?

Beitrag 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.
bobcat
Beiträge: 125
Registriert: 21. April 2010 14:51

Re: Erkennen, ob ein ChildWidget den Focus verliert?

Beitrag 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(), ...
Antworten