How to make an Application restartable

From Qt Wiki
Revision as of 19:58, 13 March 2015 by Simow (talk | contribs) (Style)
Jump to navigation Jump to search

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

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 an 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;
}