Una delle cose molto comode che il framework Eclipse RCP fornisce out-of-the-box è la capacità di riavviare automaticamente una applicazione. Qt non fornisce nulla del genere, ma non è difficile implementare un meccanismo per il reboot. In questo articolo sul Wiki ufficiale descrivo come implementare efficacemente il reboot. I passi fondamentali sono:
- creare una costante che sia associata al valore di uscita reboot
- modificare il ciclo di vita dell'applicazione (main) affinche' usi un loop per processare l'applicazione. Il loop non termina fino a che il valore di uscita dell'applicazione non e' diverso dal valore di reboot.
- creare uno slot (ad esempio nella propria main window) per effettuare il reboot.
- creare una azione per gestire il reboot e connetterla allo slot di cui sopra.
Il nuovo ciclo main (punto 2) risulta quindi simile al seguente:
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;
}
{
int currentExitCode = 0;
do{
QApplication a(argc, argv);
MainWindow w;
w.show();
currentExitCode = a.exec();
}while( currentExitCode == MainWindow::EXIT_CODE_REBOOT );
return currentExitCode;
}
ove ovviamente EXIT_CODE_REBOOT e' la costante definita ed opportunamente inizializzata. La MainWindow avra' uno slot (punto 3) simile al seguente:
void MainWindow::slotReboot()
{
qDebug() << "Performing application reboot..";
qApp->exit( MainWindow::EXIT_CODE_REBOOT );
}
{
qDebug() << "Performing application reboot..";
qApp->exit( MainWindow::EXIT_CODE_REBOOT );
}
e l'azione (punto 4) che gestisce il reboot sara' come la seguente:
actionReboot = new QAction( this );
actionReboot->setText( tr("Restart") );
actionReboot->setIcon( QIcon(":/actions/img/reboot.png" ) );
actionReboot->setStatusTip( tr("Restarts the application") );
connect( actionReboot,
SIGNAL(triggered()),
this,
SLOT(slotReboot()) );
Nessun commento:
Posta un commento