Feststellen, ob Programm gerade im Vordergrund/aktiv
Feststellen, ob Programm gerade im Vordergrund/aktiv
Hallo,
ich bin neu mit Qt und stelle wohl hier gerade eine Anfängerfrage, da ich per Suche (auch per Google) nichts passendes gefunden habe.
Ich benutze QSystemTrayIcon um das entsprchende Icon und die Blasen anzeigen zu lassen. Jetzt werden in meinem Programm einige umfangreichere Rechenoperationen vorgenommen, die einige Zeit dauern können. Wenn das Programm nach Abschluss der Rechnung nicht mehr im das aktive ist (also beispielsweise man so lange in einem anderen Programm weiterarbeitet), soll eine entsprechende Blase am Ende der Rechnung angezeigt werden.
Das Blasenanzeigen funktioniert auch ohne Probleme, doch wie bekomme ich heraus, ob mein Programm gerade noch das aktive (also im Vordergrund, oder wie nennt man das) ist?
Vielen Dank für Eure Mühen
Christian
ich bin neu mit Qt und stelle wohl hier gerade eine Anfängerfrage, da ich per Suche (auch per Google) nichts passendes gefunden habe.
Ich benutze QSystemTrayIcon um das entsprchende Icon und die Blasen anzeigen zu lassen. Jetzt werden in meinem Programm einige umfangreichere Rechenoperationen vorgenommen, die einige Zeit dauern können. Wenn das Programm nach Abschluss der Rechnung nicht mehr im das aktive ist (also beispielsweise man so lange in einem anderen Programm weiterarbeitet), soll eine entsprechende Blase am Ende der Rechnung angezeigt werden.
Das Blasenanzeigen funktioniert auch ohne Probleme, doch wie bekomme ich heraus, ob mein Programm gerade noch das aktive (also im Vordergrund, oder wie nennt man das) ist?
Vielen Dank für Eure Mühen
Christian
-
Ginsengelf
- Beiträge: 79
- Registriert: 2. Mai 2007 10:21
Moin, vielleicht hilft dir QApplication::activeWindow()?
http://doc.trolltech.com/4.3/qapplicati ... tiveWindow
Ginsengelf
edit: noch mal genauer angeguckt, hilft dir wohl doch nicht
http://doc.trolltech.com/4.3/qapplicati ... tiveWindow
Ginsengelf
edit: noch mal genauer angeguckt, hilft dir wohl doch nicht
Als Workaround könnte man es mit QApplication::focusWidget() probieren. Kein Widget, nicht aktiv. Weiß aber nicht ob das immer zutrifft.
Die deutsche Schriftsprache ist case-sensitive. Außerdem gibt es eine Interpunktionsnorm. Wenn manch einer seine Programme genauso schlampig schreibt, wie sein Posting hier, dann sollte er es lieber bleiben lassen.
Nein, funktioniert leider auch nicht zuverlässig, da beispielsweise direkt nach dem Start kein Widget den Focus hat.
Zumindest bei Windows klappt es mit der windows.h und
Doch das wäre nicht Betriebssystemunabhängig ... und darum geht es leider auch. Danke für eure bisherigen Mühen und Tipps.
Zumindest bei Windows klappt es mit der windows.h und
Code: Alles auswählen
unsigned long ForeGroundID = GetWindowThreadProcessId(::GetForegroundWindow(),NULL);
unsigned long CurrentID = GetCurrentThreadId();
if(ForeGroundID==CurrentID)
ProtokollWrite("1) im Vordergrund");
else
ProtokollWrite("1) Nicht im Vordergrund!");Versteh nicht was da nicht gehen soll. Laut Doku passts doch perfekt, und getestet hab ich es auch gerade erfolgreich.Ginsengelf hat geschrieben:Moin, vielleicht hilft dir QApplication::activeWindow()?
http://doc.trolltech.com/4.3/qapplicati ... tiveWindow
Ginsengelf
edit: noch mal genauer angeguckt, hilft dir wohl doch nicht
Und dank
funktioniert das auch direkt nach dem Start des Programms...doc hat geschrieben:Note that there might be an activeWindow() even if there is no focusWidget() [...]
MfG,
FaS
Auch die ganz einfache Abfrage ala
führt dazu, dass der Tooltip beim Start des Programms angezeigt wird und wenn ich ein anderes Programm in den Vordergrund setze, wird trotzdem nichts angezeigt. Daher würde ich dies als "funktioniert nicht" einstufen.
Wie hattest Du es eingebaut, dass es funktioniert hat? Kannst mir ja vielleicht Deinen Test zukommen lassen, vielleicht entdecke ich dann den Unterschied.
Code: Alles auswählen
if(qApp->activeWindow() == NULL)
{
QSystemTrayIcon::MessageIcon icon = QSystemTrayIcon::MessageIcon(QSystemTrayIcon::Information);
trayIcon->showMessage("Trail", text, icon, 15 * 1000);
}Wie hattest Du es eingebaut, dass es funktioniert hat? Kannst mir ja vielleicht Deinen Test zukommen lassen, vielleicht entdecke ich dann den Unterschied.
Du schreibst nichts darüber wann und wo die Funktion aufgerufen wird, woher soll ich wissen was genau nicht funktioniert. Die Funktion ist übrigens statisch, sollte man über QApplication::activeWindow() aufrufen, aber das würde hier nichts ändern, und deine eine Zeile sieht komisch aus, schreibst du auch "int integer = int(4)"? 
Also ich habe testeshalber alle halbe Sekunden activeWindow() ausgeben lassen, und immer wenn eine andere Anwendung im Vordergrund war, war das Ergebnis 0.
Also ich habe testeshalber alle halbe Sekunden activeWindow() ausgeben lassen, und immer wenn eine andere Anwendung im Vordergrund war, war das Ergebnis 0.
Entweder hast du ein Fehler im Programm und die Funktion wird überhauptgarnicht aufgerufen, oder etwas stimmt mit dem trayIcon nicht... hast du mal testeshalber genau vor der if()-Abfrage QApplication::activeWindow() ausgeben lassen, und geschaut ob überhaupt etwas ausgegeben wird wenn die Sprechblase angezeigt werden soll? Dann siehst du auch gleich welches Fenster (angeblich) den Fokus hat, und kannst schauen warum dies so ist..