How to make an Application restartable: Difference between revisions

From Qt Wiki
Jump to navigation Jump to search
No edit summary
No edit summary
Line 1: Line 1:
[[Category:HowTo]]<br />[[Category:snippets]]
[[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>
<br />Otherwise you can define a global variable or a constant value.
 
<br />h3. Define a slot in your application main window that will perform the exit from the application
Otherwise you can define a global variable or a constant value.
<br />Define a slot that will exits the application using the reboot code:
 
<br /><code>void MainWindow::slotReboot()<br />{<br /> qDebug() &lt;&lt; &quot;Performing application reboot..&quot;;<br /> qApp</s>&gt;exit( MainWindow::EXIT_CODE_REBOOT );<br />}</code>
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 );<br /> actionReboot-&gt;setText( tr(&quot;Restart&amp;quot;) );<br /> actionReboot-&gt;setStatusTip( tr(&quot;Restarts the application&amp;quot;) );<br /> connect( actionReboot,<br /> SIGNAL (triggered()),<br /> this,<br /> SLOT (slotReboot()) );</code>
<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[])<br />{<br /> int currentExitCode = 0;
<code>int main(int argc, char *argv[])
{
int currentExitCode = 0;


do{<br /> QApplication a(argc, argv);<br /> MainWindow w;<br /> w.show();<br /> currentExitCode = a.exec&amp;amp;#40;&amp;#41;;
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;