Qt wiki will be updated on October 12th 2023 starting at 11:30 AM (EEST) and the maintenance will last around 2-3 hours. During the maintenance the site will be unavailable.

How to make an Application restartable/de: Difference between revisions

From Qt Wiki
Jump to navigation Jump to search
(Localisation)
Line 1: Line 1:
{{Cleanup | reason=Auto-imported from ExpressionEngine.}}
[[Category:HowTo]]
[[Category:HowTo]]
[[Category:snippets]]
{{DISPLAYTITLE:Wie man ein Programm neustartfähig macht}}
[[Category:German]]
 
'''Deutsch''' | [[ApplicationRestart|English]]
 
= Wie man ein Programm neustartfähig macht =
 
Wenn es nötig ist, dass sich ein Programm, abhängig von Benutzereingaben, selbst neu startet, kann man dies auf einfache Weise wie folgt erreichen:
Wenn es nötig ist, dass sich ein Programm, abhängig von Benutzereingaben, selbst neu startet, kann man dies auf einfache Weise wie folgt erreichen:


=== Einen Exit-Code festlegen, der den Neustart repräsentieren soll ===
== Einen Exit-Code festlegen, der den Neustart repräsentieren soll ==
 
Es ist eine gute Idee diesen Exit-Code als statische (''static'') Variable im main window zu deklarieren…
Es ist eine gute Idee diesen Exit-Code als statische (''static'') Variable im main window zu deklarieren…


<code>static int const EXIT_CODE_REBOOT;<code>
<code>
static int const EXIT_CODE_REBOOT;
</code>


und ihn dann mit einem Wert zu initialisieren:
und ihn dann mit einem Wert zu initialisieren:


</code>int const MainWindow::EXIT_CODE_REBOOT = -123456789;</code>
<code>
int const MainWindow::EXIT_CODE_REBOOT = -123456789;
</code>


Man kann aber auch eine globale Variable oder Konstante benutzen.
Man kann aber auch eine globale Variable oder Konstante benutzen.


h3. Define a slot in your application main window that will perform the exit from the application
== Einen Slot anlegen ==
Definiere einen Slot in deinem Programm-Hauptfenster, von dem aus der Neustart ausgeführt wird  
Definiere einen Slot in deinem Programm-Hauptfenster, von dem aus der Neustart ausgeführt wird:


<code>void MainWindow::slotReboot()
<code>
void MainWindow::slotReboot()
{
{
  qDebug() << "Performing application reboot..";
  qDebug() << "Performing application reboot...";
  qApp->exit( MainWindow::EXIT_CODE_REBOOT );
  qApp->exit( MainWindow::EXIT_CODE_REBOOT );
}</code>
}
 
</code>
=== Erstelle eine QAction, die sich um den Neustart kümmert ===
 
Wenn die folgende QAction ausgelöst wird, sendet sie ein Signal an unsere <code>slotReboot()</code> Methode und veranlasst so den Neustart des Programms.


<code> actionReboot = new QAction( this );
== Erstelle eine QAction, die sich um den Neustart kümmert ==
actionReboot->setText( tr("Restart") );
Wenn die folgende QAction ausgelöst wird, sendet sie ein Signal an unsere <tt>slotReboot()</tt> Methode und veranlasst so den Neustart des Programms.
actionReboot->setStatusTip( tr("Restarts the application") );
connect( actionReboot,
SIGNAL (triggered()),
this,
SLOT (slotReboot()) );</code>


=== Hauptprogrammfluß anpassen ===
<code>
actionReboot = new QAction( this );
actionReboot->setText( tr("Restart") );
actionReboot->setStatusTip( tr("Restarts the application") );
connect( actionReboot, SIGNAL (triggered()),
                this, SLOT (slotReboot())
      );
</code>


Der letzte Schritt besteht darin, die <code>main()</code>-Funktion so zu verändern, dass bei unserem Neustart '''alle Objekte unseres Programms zerstört werden''' und der Programmfluß wieder am Anfang beginnt:
== Hauptprogrammfluss anpassen ==
Der letzte Schritt besteht darin, die <tt>main()</tt>-Funktion so zu verändern, dass bei unserem Neustart ''alle Objekte unseres Programms zerstört werden'' und der Programmfluss wieder am Anfang beginnt:


<code>int main(int argc, char *argv[])
<code>
int main(int argc, char *argv[])
{
{
  int currentExitCode = 0;
  int currentExitCode = 0;


do{
do {
QApplication a(argc, argv);
  QApplication a(argc, argv);
MainWindow w;
  MainWindow w;
w.show();
  w.show();
currentExitCode = a.exec();
  currentExitCode = a.exec();
 
} while( currentExitCode == MainWindow::EXIT_CODE_REBOOT );
}while( currentExitCode == MainWindow::EXIT_CODE_REBOOT );


return currentExitCode;
return currentExitCode;
}
</code>

Revision as of 20:06, 13 March 2015


Wenn es nötig ist, dass sich ein Programm, abhängig von Benutzereingaben, selbst neu startet, kann man dies auf einfache Weise wie folgt erreichen:

Einen Exit-Code festlegen, der den Neustart repräsentieren soll

Es ist eine gute Idee diesen Exit-Code als statische (static) Variable im main window zu deklarieren…

static int const EXIT_CODE_REBOOT;

und ihn dann mit einem Wert zu initialisieren:

int const MainWindow::EXIT_CODE_REBOOT = -123456789;

Man kann aber auch eine globale Variable oder Konstante benutzen.

Einen Slot anlegen

Definiere einen Slot in deinem Programm-Hauptfenster, von dem aus der Neustart ausgeführt wird:

void MainWindow::slotReboot()
{
 qDebug() << "Performing application reboot...";
 qApp->exit( MainWindow::EXIT_CODE_REBOOT );
}

Erstelle eine QAction, die sich um den Neustart kümmert

Wenn die folgende QAction ausgelöst wird, sendet sie ein Signal an unsere slotReboot() Methode und veranlasst so den Neustart des Programms.

actionReboot = new QAction( this );
actionReboot->setText( tr("Restart") );
actionReboot->setStatusTip( tr("Restarts the application") );
connect( actionReboot, SIGNAL (triggered()),
                 this, SLOT (slotReboot())
       );

Hauptprogrammfluss anpassen

Der letzte Schritt besteht darin, die main()-Funktion so zu verändern, dass bei unserem Neustart alle Objekte unseres Programms zerstört werden und der Programmfluss wieder am Anfang beginnt:

int main(int argc, char *argv[])
{
 int currentExitCode = 0;

 do {
  QApplication a(argc, argv);
  MainWindow w;
  w.show();
  currentExitCode = a.exec();
 } while( currentExitCode == MainWindow::EXIT_CODE_REBOOT );

 return currentExitCode;
}