QSystemTrayIcon - schließen des Programms verhindern

Alles rund um die Programmierung mit Qt
Antworten
SuperSonik
Beiträge: 69
Registriert: 29. Januar 2007 10:40

QSystemTrayIcon - schließen des Programms verhindern

Beitrag von SuperSonik »

Hallo Leute,
wie ich in der Überschrift angedeutet habe würde ich gerne das Schließen
eines Programms komplett verhindern.
Ich habe ein Programm geschrieben, dass niemals geschlossen werden darf.
(Warum wäre eine zu lange Geschichte :) )
Jedes mal wenn der Benutzer minimieren oder schließen drückt soll
ein QSystemTrayIcon erscheinen, das Programm soll aber im Hintergrund
weiter laufen. Mit einem Klick auf das Icon soll das Programm dann wieder
"hochkommen".
Was ich wissen müßte ist welche Signale beim minimieren oder schließen
ausgelöst werden. Muß ich diese Signale dann nur mit eigenen Slots verbinden, oder muß das Beenden des Programms sonst noch irgendwie verhindert werden?
Gruß,

SuperSonik
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag von macman »

Du suchst nach closeEvent und resizeEvent. Im closeEvent kannst Du das schliessen verhindern und versteckst es nur und im resizeEvent musst Du den Status abfragen und es entsprechend verstecken oder nicht. Anzeigen des Systray-Icons nicht vergessen, sonst kommst Du nicht mehr dran :-)
SuperSonik
Beiträge: 69
Registriert: 29. Januar 2007 10:40

Beitrag von SuperSonik »

Genau sowas habe ich gesucht. Viele Dank! :D
Gruß,
SuperSonik
SuperSonik
Beiträge: 69
Registriert: 29. Januar 2007 10:40

Wie kann ich denn das Schließen verhindern?

Beitrag von SuperSonik »

Also ich habe versucht das Signal closeEvent mit einem Slot von mir zu verbinden:

Code: Alles auswählen

QObject::connect(&ui, SIGNAL( closeEvent(QCloseEvent *event) ), &ui , SLOT( makeTrayIcon(QCloseEvent *event) ) );
Hier mein Slot:

Code: Alles auswählen

void makeTrayIcon(QCloseEvent *event){
 	
 	trayicon = new QSystemTrayIcon(QIcon(QString::fromUtf8(":bild.jpg")));
 	trayicon->show();
 	centralwidget->hide();
 	event->ignore();
 	
 }
Die Anwendung wird aber dennoch nach dem klicken auf das "X" beendet.
Wie kann ich das verhindern ?
Ach ja, trayicon habe ich als Membervariable angelegt. Allerdings wird das
Trayicon nicht angezeigt :?
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

In dem du die Events als Events und nicht als Signale behandelst...
SuperSonik
Beiträge: 69
Registriert: 29. Januar 2007 10:40

Beitrag von SuperSonik »

upsala hat geschrieben:In dem du die Events als Events und nicht als Signale behandelst...
Mmmm,
ok das hatte ich gar nicht gemerkt. Sorry! :?
Ich habe inzwischen einiges in der Doku gelesen, aber so ganz zurecht
komme ich mit diesen Events noch nicht.

Ich habe es geschafft das die Anwendung nicht mehr beendet wird:

Code: Alles auswählen

app.setQuitOnLastWindowClosed(false);
Und das QSystemTrayIcon wird auch schon angezeigt, allerdings kann man noch nicht drauf klicken.

Gibt es irgendwo im Internet ein gutes Tutorial über Events?
Denn ich habe sie bisher noch nie gebraucht und verstehe das Ganze im Moment noch nicht so richtig.

Gruß,
SuperSonik
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

SuperSonik hat geschrieben: Gibt es irgendwo im Internet ein gutes Tutorial über Events?
http://doc.trolltech.com/4.2/signalsandslots.html
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
SuperSonik
Beiträge: 69
Registriert: 29. Januar 2007 10:40

Beitrag von SuperSonik »

Christian81 hat geschrieben:
SuperSonik hat geschrieben: Gibt es irgendwo im Internet ein gutes Tutorial über Events?
http://doc.trolltech.com/4.2/signalsandslots.html
Mmmm,
das ist eine Einführung in Signals und Slots. Mit Denen kenne ich mich schon ganz gut aus. Ich suche etwas über Events.
Gruß,
SuperSonik
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Wer lesen kann ist klar im Vorteil, sorry :(
Über Events gibt es nicht viel - was auch. Mann kann sie filtern (per EventFilter) oder einige Klassen bieten auch direkt Zugriff auf wichtige (z.B. keyEvent()). Was für Events es gbit, steht in der Doku. Ansonsten wüsste ich nicht was man weiter wissen muss.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag von macman »

Man sollte wissen das die Eventhandler in den Basisklassen bereits definiert sind und man sie einfach nur überschreiben muss. Ich denke das ist es was SuperSonic nicht bekannt ist.
SuperSonik
Beiträge: 69
Registriert: 29. Januar 2007 10:40

Beitrag von SuperSonik »

macman hat geschrieben:Man sollte wissen das die Eventhandler in den Basisklassen bereits definiert sind und man sie einfach nur überschreiben muss. Ich denke das ist es was SuperSonic nicht bekannt ist.
Ahhh, gut. Da hilft mir schonmal weiter. Und aufgerufen werden die dann
automatisch. Das heißt wenn ich closeEvent(QCloseEvent *event)
in meiner Klasse überschreibe wird die Methode beim schließen des Widgets aufgerufen?
Gruß,
SuperSonik
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag von macman »

Genau. Und wenn Du das Event ignorierst und nicht akzeptierst, dann wird auch nichts geschlossen.
qtoBSn
Beiträge: 8
Registriert: 2. Februar 2007 16:11

Beitrag von qtoBSn »

Im example-Ordner ist das systray-app genau was du suchst.

Gruß,
qtoBSn
SuperSonik
Beiträge: 69
Registriert: 29. Januar 2007 10:40

Beitrag von SuperSonik »

macman hat geschrieben:Genau. Und wenn Du das Event ignorierst und nicht akzeptierst, dann wird auch nichts geschlossen.
qtoBSn hat geschrieben:Im example-Ordner ist das systray-app genau was du suchst.

Gruß,
qtoBSn
Alles klar. Damit komme ich weiter.
Vielen Dank.
Gruß,
SuperSonik
Antworten