How to make an Application restartable: Difference between revisions
		
		
		
		
		
		Jump to navigation
		Jump to search
		
				
		
		
	
AutoSpider (talk | contribs)  (Convert ExpressionEngine section headers)  | 
				 (syntaxhighlight)  | 
				||
| (6 intermediate revisions by 2 users not shown) | |||
| Line 1: | Line 1: | ||
[[Category:HowTo]]  | [[Category:HowTo]]  | ||
{{LangSwitch}}  | |||
If you are in the need to make an application restartable depending on the user interaction you have to follow these steps:  | |||
If you   | |||
== 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:  | It is a good idea to define this code as a static variable in your main window:  | ||
<code>static int const EXIT_CODE_REBOOT;<code>  | <code>  | ||
static int const EXIT_CODE_REBOOT;  | |||
</code>  | |||
and initialize it with a value:  | and initialize it with a value:  | ||
<  | <code>  | ||
int const MainWindow::EXIT_CODE_REBOOT = -123456789;  | |||
</code>  | |||
Otherwise you can define a global variable or a constant value.  | Otherwise you can define a global variable or a constant value.  | ||
== Define a Slot in your Application ==  | |||
Next define a slot that will exit the application using the reboot code:  | |||
<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>  | |||
== Create a QAction 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:  | 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>  | |||
The last step is to modify the application main function to handle the new cycle that will allow   | == Modify the Application Cycle ==  | ||
The last step is to modify the application main function to handle the new cycle that will allow rebooting:  | |||
<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);  | |||
  MainWindow w;  | |||
  w.show();  | |||
  currentExitCode = a.exec();  | |||
 } while( currentExitCode == MainWindow::EXIT_CODE_REBOOT );  | |||
}while( currentExitCode == MainWindow::EXIT_CODE_REBOOT );  | |||
return currentExitCode;  |  return currentExitCode;  | ||
}  | |||
</code>  | |||
Latest revision as of 02:51, 18 May 2017
If you are in 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;
and initialize it with a value:
int const MainWindow::EXIT_CODE_REBOOT = -123456789;
Otherwise you can define a global variable or a constant value.
Define a Slot in your Application
Next define a slot that will exit the application using the reboot code:
void MainWindow::slotReboot()
{
 qDebug() << "Performing application reboot...";
 qApp->exit( MainWindow::EXIT_CODE_REBOOT );
}
Create a QAction 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 rebooting:
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;
}