How to make an Application restartable: Difference between revisions
No edit summary  | 
				No edit summary  | 
				||
| Line 1: | Line 1: | ||
[[Category:HowTo]]  | [[Category:HowTo]]  | ||
[[Category:snippets]]  | |||
'''English''' | [[ApplicationRestart_German|Deutsch]]  | '''English''' | [[ApplicationRestart_German|Deutsch]]  | ||
| Line 16: | Line 17: | ||
</code>int const MainWindow::EXIT_CODE_REBOOT = -123456789;</code>  | </code>int const MainWindow::EXIT_CODE_REBOOT = -123456789;</code>  | ||
Otherwise you can define a global variable or a constant value.  | |||
h3. Define a slot in your application main window that will perform the exit from the application  | |||
Define a slot that will exits the application using the reboot code:  | |||
<code>void MainWindow::slotReboot()  | |||
{  | |||
 qDebug() << "Performing application reboot..";  | |||
 qApp->exit( MainWindow::EXIT_CODE_REBOOT );  | |||
}</code>  | |||
=== Create an action to handle the reboot ===  | === Create an action to handle the reboot ===  | ||
| Line 25: | Line 34: | ||
Create an action that will consume the above slot in order to exit with the reboot code. Something like the following will work:  | Create an action that will consume the above slot in order to exit with the reboot code. Something like the following will work:  | ||
<code> actionReboot = new QAction( this );  | <code> actionReboot = new QAction( this );  | ||
 actionReboot->setText( tr("Restart") );  | |||
 actionReboot->setStatusTip( tr("Restarts the application") );  | |||
 connect( actionReboot,  | |||
 SIGNAL (triggered()),  | |||
 this,  | |||
 SLOT (slotReboot()) );</code>  | |||
=== Modify the application cycle ===  | === Modify the application cycle ===  | ||
| Line 31: | Line 46: | ||
The last step is to modify the application main function to handle the new cycle that will allow reboot:  | The last step is to modify the application main function to handle the new cycle that will allow reboot:  | ||
<code>int main(int argc, char *argv[])  | <code>int main(int argc, char *argv[])  | ||
{  | |||
 int currentExitCode = 0;  | |||
do{  | do{  | ||
 QApplication a(argc, argv);  | |||
 MainWindow w;  | |||
 w.show();  | |||
 currentExitCode = a.exec();  | |||
}while( currentExitCode == MainWindow::EXIT_CODE_REBOOT );  | }while( currentExitCode == MainWindow::EXIT_CODE_REBOOT );  | ||
return currentExitCode;  | return currentExitCode;  | ||
Revision as of 09:28, 25 February 2015
English | Deutsch
Making an application restartable/rebootable
If you have the need to make an application restartable depending on the user interaction you have to follow these steps:
Create an exit code that represents your reboot/restart event
It is a good idea to define this code as a static variable in your main window:
static int const EXIT_CODE_REBOOT;<code>
and initialize it with a value:
int const MainWindow::EXIT_CODE_REBOOT = -123456789;
Otherwise you can define a global variable or a constant value.
h3. Define a slot in your application main window that will perform the exit from the application
Define a slot that will exits the application using the reboot code:
void MainWindow::slotReboot()
{
 qDebug() << "Performing application reboot..";
 qApp->exit( MainWindow::EXIT_CODE_REBOOT );
}
Create an action to handle the reboot
Create an action that will consume the above slot in order to exit with the reboot code. Something like the following will work:
 actionReboot = new QAction( this );
 actionReboot->setText( tr("Restart") );
 actionReboot->setStatusTip( tr("Restarts the application") );
 connect( actionReboot,
 SIGNAL (triggered()),
 this,
 SLOT (slotReboot()) );
Modify the application cycle
The last step is to modify the application main function to handle the new cycle that will allow reboot:
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;