web-dev-qa-db-fra.com

Qt Exécuter un programme externe

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?

24
Testerrrr

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);
28
tomvodi

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);
7
nv95

QDir :: homePath ne se termine pas avec le séparateur. Chemin valide vers votre exe

QString file = QDir::homePath + QDir::separator + "file.exe";
5
nnesterov

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.

0
Jason C