Подтвердить что ты не робот

Qt Выполнение внешней программы

Я хочу запустить внешнюю программу из моей QT-Programm. Единственным рабочим решением было:

system("start explorer.exe");

Но он работает только для окон и запускает командную строку на мгновение.

Следующее, что я пробовал, было:

QProcess process;
QString file = QDir::homepath + "file.exe";
process.start(file);
//process.execute(file); //i tried as well

Но ничего не произошло. Любые идеи?

4b9b3361

Ответ 1

Если ваш объект process является переменной в стеке (например, в методе), код не будет работать так, как ожидалось, потому что процесс, который вы уже начали, будет убит в деструкторе QProcess, когда метод заканчивается.

void MyClass::myMethod()
{
    QProcess process;
    QString file = QDir::homepath + "file.exe";
    process.start(file);
}

Вместо этого вы должны выделить объект QProcess в куче:

QProcess *process = new QProcess(this);
QString file = QDir::homepath + "/file.exe";
process->start(file);

Ответ 2

Если вы хотите, чтобы ваша программа ждала во время выполнения процесса, вы можете использовать

QProcess::execute(file);

вместо

QProcess process;
process.start(file);

Ответ 3

QDir:: homePath не заканчивается разделителем. Действительный путь к вашему exe

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

Ответ 4

Просто используйте QProcess::startDetached; он статичен, и вам не нужно беспокоиться о том, чтобы дождаться его завершения или выделить что-то в куче или что-то в этом роде:

QProcess::startDetached(QDir::homepath + "/file.exe");

Это сторонний аналог QProcess::execute.