1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
|
//...
/** Lancement des programmes externes
* SLOT appele lors d'un clic sur le bouton ui->pb_lancerProgrammes */
void MainWindow::on_pb_lancerProgrammes_clicked()
{
// Cas ou l'execution est en cours: interruption
if(ui->pb_lancerProgrammes->text().contains("Arreter"))
{
if(process1.state() == QProcess::Running)
process1.kill();
if(process2.state() == QProcess::Running)
process2.kill();
QMessageBox::information(this, "Termine", "Execution interrompue");
return;
}
// Initialisation et execution des programmes
ui->pb_lancerProgrammes->setText("Arreter l'execution"); // Le bouton "Lancer" devient "Arreter"
ui->myPlainTextEdit->clear(); // Efface l'eventuel contenu de la "console" IHM
projectPath = "/home/me/project1"; // Indication du repertoire projet a executer
executerProcess1(); // Lancement du process 1
}
/* Execution du process 1
/* Appele apres un clic sur le bouton ui->pb_lancerProgrammes */
void MainWindow::executerProcess1()
{
process1= new QProcess();
// A chaque fois que des donnees sortent en console, lireSortieProcess1() sera appele
connect(process1, SIGNAL(readyReadStandardOutput()), this, SLOT(lireSortieProcess1()));
// Quand le processus sera fini, executerProcess2() sera appele
connect(process1, SIGNAL(finished(int)), this, SLOT(executerProcess2(int)));
// Demarrage de process1
process1->start(projectPath + "/process1.sh");
}
/* Execution du process 2
/* Appele apres l'emission du signal finished() de process1 */
void MainWindow::executerProcess2(int statutProcess1)
{
if(statutProcess1 != 0)
QMessageBox::error(this, "Erreur", "Process1 s'est termine avec erreur - code " + statutProcess1);
else
{
process2 = new QProcess();
process2 ->setWorkingDirectory(projectPath);
connect(process2 , SIGNAL(readyReadStandardOutput()), this, SLOT(lireSortieProcess2()));
connect(process2 , SIGNAL(finished(int)), this, SLOT(process2Fini(int)));
process2->start("./process2.sh");
}
}
/* Signale la fin de l'execution
/* Appele apres l'emission du signal finished() de process2 */
void MainWindow::process2Fini(int exitCode)
{
QMessageBox::information(this, "Termine", "Process2 s'est termine avec le code " + exitCode);
ui->pb_lancerProgrammes->setText("Lancer l'execution"); // Le bouton "Arreter" devient "Lancer"
}
/* Lecture de la sortie console du process 1
/* Appele a chaque emission du signal readyReadStandardOutput() de process1 */
void MainWindow::lireSortieProcess1()
{
QByteArray output = process1->readAllStandardOutput();
ui->console->appendPlainText(output);
ui->console->moveCursor(QTextCursor::End);
}
/* Lecture de la sortie console du process 2
/* Appele a chaque emission du signal readyReadStandardOutput() de process2 */
void MainWindow::lireSortieProcess2()
{
QByteArray output = process2->readAllStandardOutput();
ui->console->appendPlainText(output);
ui->console->moveCursor(QTextCursor::End);
} |
Partager