How to make an Application restartable: Difference between revisions

From Qt Wiki
Jump to navigation Jump to search
No edit summary
 
(syntaxhighlight)
 
(11 intermediate revisions by 5 users not shown)
Line 1: Line 1:
=Making an application restartable/rebootable=
[[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 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:


===Create an exit code that represents your reboot/restart event===
<code>
static int const EXIT_CODE_REBOOT;
</code>


It is a good idea to define this code as a static variable in your main window:
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 main window that will perform the exit from the application===
== Define a Slot in your Application ==
Next define a slot that will exit the application using the reboot code:


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 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 );
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 ==
The last step is to modify the application main function to handle the new cycle that will allow rebooting:


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[])
{
int currentExitCode = 0;


===Categories:===
do {
  QApplication a(argc, argv);
  MainWindow w;
  w.show();
  currentExitCode = a.exec();
} while( currentExitCode == MainWindow::EXIT_CODE_REBOOT );


* [[:Category:HowTo|HowTo]]
return currentExitCode;
* [[:Category:snippets|snippets]]
}
</code>

Latest revision as of 02:51, 18 May 2017

En Ar Bg De El Es Fa Fi Fr Hi Hu It Ja Kn Ko Ms Nl Pl Pt Ru Sq Th Tr Uk Zh

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