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: 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;