Programm wieder anzeigen nicht neu starten.
-
Hallo erstmal, mein Vorhaben ist folgendes: Wenn ich z.B. Origin starte und dann schließe, läuft der Prozess im Hintergrund weiter und wird in der Symbolleiste angezeigt. Wenn ich jetzt wieder auf das Icon klicke, startet keine neue Instanz von Origin sondern die laufende zeigt sich nur wieder. Da Origin mit Qt entwickelt wurde, muss es ja umsetzbar sein, nur weiß ich nicht wie. Gibt es da Klassen zu? Ich wüsste auch nicht wo nach ich in der Dokumentation suchen sollte...
Schon mal vielen Dank an alle!
PS: Es geht alleine um das wieder öffnen, der Rest läuft schon.
-
1. Es gibt keinen Grund, warum sich beim Schließen des (letzten) Fensters die Applikation beenden sollte
2. Was du mit "läuft in der Taskleiste weiter" meinst, versteh ich nicht. Lässt sich das Fenster gar nicht schließen? Das kann man natürlich auch verhindern. Oder wird es in den System Tray minimiert? Dafür gibts in Qt das QSystemTrayIcon
3. Wenn du das aus dem Tray wieder aufmachst, ist es eh kein Problem. Wenn du das Program "normal" wieder startest und das feststellen soll, dass bereits eine Instanz läuft, könnte man das unter Windows z.B. mit einem Named Mutex lösen.
-
Richtig ich nutze einfach hide() und ein QSystemTrayIcon. Ich weiß nur nicht wie ich es umsetzen soll, dass kein neues Programm startet. Ich will einfach, dass das beim alten wieder show() aufgerufen wird und das neue direkt gekillt wird.
-
Wie gesagt, z.B. mit einem named mutex. Bin mir nicht sicher wie/inwiefern Qt das kapselt. Es gibt z.B. ein QSystemSemaphore, aber ich habs noch nie benutzt.
Schau dir das an, damit müsstest du mitbekommen, dass schon ein zweiter Prozess läuft (der den gleichen Key nutzt).Dann musst dem anderen Prozess noch irgendwie mitteilen, dass er sein Fenster anzeigen soll. Dafür brauchst du irgendeinen IPC Mechanismus, da gibts dutzende.
-
Alternativ ein "global named mutex" auf Basis von QSharedMemory: Having a Global named Mutex in Qt 5.2
Und für IPC: Inter-Process Communication in Qt
-
in main:
#include <qtsingleapplication.h>
...
QtSingleApplication instance(argc, argv);
if (instance.sendMessage("Wake up!")) return 0;
instance.setQuitOnLastWindowClosed( false );
-
Für alle die es evtl. noch interessiert:
Ich habe jetzt einen QLocalSocket erstellt, ihn mit einem Server verbunden, und wenn das geklappt hat, ihn direkt gekillt. Hat es nicht geklappt habe ich eben diesen QLocalServer erstellt und das Signal newConnection() mit show() von meinem Mainwindow verbunden. QtSingleApplication geht übrigens unter Qt 5 nicht mehr...