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
AutoSpider (talk | contribs) (Add "cleanup" tag) |
(syntaxhighlight) |
||
(7 intermediate revisions by 3 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;
}