Seite 1 von 1
QSystemTrayIcon - schließen des Programms verhindern
Verfasst: 7. Februar 2007 15:46
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
Verfasst: 7. Februar 2007 16:10
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

Verfasst: 7. Februar 2007 16:19
von SuperSonik
Genau sowas habe ich gesucht. Viele Dank!
Gruß,
SuperSonik
Wie kann ich denn das Schließen verhindern?
Verfasst: 7. Februar 2007 16:35
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

Verfasst: 7. Februar 2007 16:56
von upsala
In dem du die Events als Events und nicht als Signale behandelst...
Verfasst: 8. Februar 2007 10:00
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:
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
Verfasst: 8. Februar 2007 11:03
von Christian81
SuperSonik hat geschrieben:
Gibt es irgendwo im Internet ein gutes Tutorial über Events?
http://doc.trolltech.com/4.2/signalsandslots.html
Verfasst: 8. Februar 2007 12:23
von SuperSonik
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
Verfasst: 8. Februar 2007 12:38
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.
Verfasst: 8. Februar 2007 14:58
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.
Verfasst: 8. Februar 2007 18:46
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
Verfasst: 9. Februar 2007 10:13
von macman
Genau. Und wenn Du das Event ignorierst und nicht akzeptierst, dann wird auch nichts geschlossen.
Verfasst: 9. Februar 2007 11:36
von qtoBSn
Im example-Ordner ist das systray-app genau was du suchst.
Gruß,
qtoBSn
Verfasst: 9. Februar 2007 14:26
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