Lancement d’un script shell lorsque Button pressé sur l’interface graphique graphique créée avec Qt

J’ai un script shell qui effectue des sauvegardes sur un serveur distant lorsqu’il est exécuté sur un PC tactile (Uubntu Lucid Lynx). Maintenant, je veux que cela soit automatisé en créant un petit bouton dans une application graphique qui s’exécute dessus. L’application est construite en utilisant Qt et C ++.

Jusqu’à présent, je suis capable d’utiliser le QFileDialog pour ouvrir un navigateur de dossiers et accéder au fichier .sh, mais est-il possible d’ouvrir directement le fichier .sh défini (en définissant le nom et l’emplacement)?

Il y avait quelques indications que QProcess devrait être utilisé mais je suis un peu confus au sujet de sa mise en œuvre. Merci d’avance.

Vous pouvez le rendre bloquant ou non bloquant. Cela dépend si vous souhaitez bloquer votre processus principal ou exécuter le script shell en arrière-plan en mode asynchrone.

Aussi, puisque vous n’avez pas besoin de la sortie, vous n’avez même pas besoin d’instancier ici, utilisez simplement les méthodes statiques.

Code de blocage

 #include  #include  #include  #include  ... // Get this file name dynamically with an input GUI element, like QFileDialog // or hard code the ssortingng here. QSsortingng fileName = QFileDialog::getOpenFileName(this, tr("Open Script"), "/", tr("Script Files (*.sh)")); if (QProcess::execute(QSsortingng("/bin/sh") + fileName) < 0) qDebug() << "Failed to run"; 

Non bloquant

 #include  #include  #include  #include  ... // Get this file name dynamically with an input GUI element, like QFileDialog // or hard code the ssortingng here. QSsortingng fileName = QFileDialog::getOpenFileName(this, tr("Open Script"), "/", tr("Script Files (*.sh)")); // Uniform initialization requires C++11 support, so you would need to put // this into your project file: CONFIG+=c+11 if (!QProcess::startDetached("/bin/sh", QSsortingngList{fileName})) qDebug() << "Failed to run"; 

Vous pouvez exécuter shell ou bash en passant votre script en paramètre:

 QProcess process; process.startDetached("/bin/sh", QSsortingngList()<< "/Path/to/myScript.sh"); 

Utilisez l’une des surcharges QProcess::startDetached : http://qt-project.org/doc/qt-4.8/qprocess.html#startDetached . Celui-ci est le plus complet:

 bool QProcess::startDetached ( const QSsortingng & program, const QSsortingngList & arguments, const QSsortingng & workingDirectory, qint64 * pid = 0 ) [static] 

Exemple d’utilisation:

 QProcess::startDetached("/.../script", QSsortingngList { "-i", "a.txt", ... }); 

QSsortingngList constructeur QSsortingngList ci-dessus utilise la fonctionnalité C ++ 11. Vous pouvez toujours construire QSsortingngList de manière QSsortingngList en charge par C ++ 03, par QSsortingnglist list; list << "-i" << "a.txt"; QSsortingnglist list; list << "-i" << "a.txt"; Ou si vous n'avez pas besoin de transmettre de parameters à votre script, appelez simplement QProcess::startDetached("/.../script") .

Si vous avez besoin de recevoir la sortie de votre script, vous pouvez créer QProcess object QProcess et start appel. Il est bien décrit ici: http://qt-project.org/doc/qt-4.8/qprocess.html#details