Seite 1 von 1
Shutdown erkennen (Linux)
Verfasst: Mittwoch 21. März 2012, 16:39
von bernd59
Mit meinem Code verhindere ich, das das Hauptfenster geschlossen wird.
Code: Alles auswählen
def closeEvent(self, event):
if self.isHidden():
self.media.stop()
event.accept()
else:
self.hide()
Dadurch wird aber der Shutdown der KDE abgebrochen, falls das Fenster nicht Hide ist. Wie kann ich erkennen, ob nur das Fenster geschlossen wird oder der Rechner heruntergefahren wird?
Bernd
Re: Shutdown erkennen (Linux)
Verfasst: Mittwoch 21. März 2012, 17:39
von lunar
@bernd59: So einfach kannst Du das gar nicht. Es gibt keine Möglichkeit, um zu erkennen, ob das Schließen eines Fensters vom Nutzer oder automatisch vom System veranlasst ist. Es gibt Mittel und Wege drum herum, vor allem
Session Management, oder das Reagieren auf bestimmte Ereignisse der Desktop-Umgebung, aber das ändert alles nichts daran, dass Dein Fenster früher oder später geschlossen werden muss.
Warum willst Du dem Benutzer überhaupt das Schließen des Fensters verwehren? Das ist einigermaßen unhöflich dem Nutzer gegenüber…
Re: Shutdown erkennen (Linux)
Verfasst: Mittwoch 21. März 2012, 19:03
von bernd59
Hallo,
ich möchte erreichen, wenn der Nutzer auf das Kreuzt klickt, das das Programm im Tray minimiert wird. Zum Beenden gibt es einen extra Menüpunkt. (Wie Agregator & Amarok)
Bernd
Re: Shutdown erkennen (Linux)
Verfasst: Mittwoch 21. März 2012, 20:02
von lunar
@bernd59: Versuche mal, das Fenster pauschal zu verstecken, und das Ereignis explizit zu verwerfen:
Code: Alles auswählen
def closeEvent(self, event):
self.hide()
event.ignore()
So verhält sich Amarok ebenfalls, insofern sollte dieser Quelltext funktionieren. Bist Du sicher, dass wirklich Deine Anwendung den Abmeldevorgang von KDE abbricht?
Re: Shutdown erkennen (Linux)
Verfasst: Donnerstag 22. März 2012, 08:25
von bernd59
Ja, bin ich sicher
Liegt es vielleicht daran, daß ich QApplication nutze (Das Programm soll auch unter Lubuntu laufen - Ohne KDE)
Unter Lubuntu (Netbook) funktioniert alles.
Bernd
Re: Shutdown erkennen (Linux)
Verfasst: Donnerstag 22. März 2012, 08:54
von BlackJack
@bernd59: Daran sollt es eigentlich nicht liegen. Als nächstes würde ich an Deiner Stelle mal eine minimale, aber lauffähige Anwendung schreiben, die das Problem demonstriert und die zeigen. Damit das hier mehr Leute mal nachvollziehen können.
Re: Shutdown erkennen (Linux)
Verfasst: Donnerstag 22. März 2012, 13:37
von lunar
@bernd59: Du hast recht. Tatsächlich verwirft Qt die Aufforderung der Fensterverwaltung, die Anwendung zu beenden, wenn das Ereignis beim Hauptfenster verworfen wird, und in der Folge glaubt die Sitzungsverwaltung von KDE, dass die Anwendung noch nicht beendet werden darf.
Die einfache Lösung wäre, dass Fenster nicht zu verstecken, sondern tatsächlich zu schließen, und ein neues Fenster zu erzeugen, wenn es wieder angezeigt werden soll. Dazu musst Du lediglich "QApplication.quitOnLastWindowClosed" deaktivieren, damit die Anwendung im Hintergrund weiterläuft. Sofern es nicht unbedingt erforderlich ist, dass das Fenster geöffnet bleibt, wäre das diejenige Lösung, die ich ob ihrer Einfachheit wählen würde.
Die kompliziertere, aber richtige(TM) Lösung wäre, die Anwendung um
Unterstützung für die Sitzungsverwaltung zu erweitern. In Deinem Anwendungsfall beläuft sich das wohl darauf, von "QApplication" abzuleiten, dort "commitData()" zu überschreiben, in dieser Methode ein Flag zu setzen, welches signalisiert, dass die Sitzung beendet wird, dieses Flag in ".closeEvent()" abzufragen, und falls es gesetzt ist, dass Ereignis nicht zu verwerfen, sondern zu akzeptieren. So geht Amarok tatsächlich vor, hat es allerdings einfacher, da KDE diese Logik in KApplication bereits implementiert und "KApplication.sessionSaving()" zur Verfügung stellt, um zu prüfen, ob gerade die Sitzung beendet wird.
Re: Shutdown erkennen (Linux)
Verfasst: Donnerstag 22. März 2012, 15:21
von bernd59
Danke, ich habe die 2. Variante genutzt. Und sie funktioniert
Bernd