Je veux démarrer un programme externe à partir de mon programme QT. La seule solution de travail était:
system("start Explorer.exe");
Mais cela ne fonctionne que pour Windows et démarre une ligne de commande pendant un moment.
La prochaine chose que j'ai essayée était:
QProcess process;
QString file = QDir::homepath + "file.exe";
process.start(file);
//process.execute(file); //i tried as well
Mais rien ne s'est passé. Des idées?
Si votre objet process
est une variable sur la pile (par exemple dans une méthode), le code ne fonctionnerait pas comme prévu car le processus que vous avez déjà démarré sera tué dans le destructeur de QProcess
, lorsque la méthode se termine.
void MyClass::myMethod()
{
QProcess process;
QString file = QDir::homepath + "file.exe";
process.start(file);
}
Vous devriez plutôt allouer l'objet QProcess
sur le tas comme ça:
QProcess *process = new QProcess(this);
QString file = QDir::homepath + "/file.exe";
process->start(file);
Si vous voulez que votre programme attende pendant l’exécution du processus, vous pouvez utiliser
QProcess::execute(file);
au lieu de
QProcess process;
process.start(file);
QDir :: homePath ne se termine pas avec le séparateur. Chemin valide vers votre exe
QString file = QDir::homePath + QDir::separator + "file.exe";
Utilisez simplement QProcess::startDetached
; il est statique et vous n'avez pas à vous soucier d'attendre qu'il se termine ou d'allouer des choses sur le tas ou quelque chose comme ça:
QProcess::startDetached(QDir::homepath + "/file.exe");
C'est la contrepartie détachée de QProcess::execute
.