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
Но ничего не произошло. Любые идеи?
Ответы
Ответ 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
.