Как запустить команду Windows cmd с помощью Qt?

Я должен запустить следующую команду с помощью Qt, которая появится в окне Git GUI.

D:MyWorkTempsource>git gui

Как мне это сделать?

я попробовал следующее, Но это не сработало:

QProcess process;   
process.start("git gui",QStringList() << "D:MyWorkTempsource>");

5 ответов


попробуйте это:

QProcess process;
process.setWorkingDirectory("D:\MyWork\Temp\source");
process.start("git", QStringList() << "gui");

или если вы хотите сделать это в одну строку, вы можете сделать это (здесь мы используем startDetached вместо start):

QProcess::startDetached("git", QStringList() << "gui", "D:\MyWork\Temp\source");

во втором случае лучше проверить код возврата (чтобы показать сообщение об ошибке, если ваша программа не может запустить внешнюю программу). Также вы можете поместить все аргументы в first program строка (т. е. process.start("git gui"); это тоже допускается):

bool res = QProcess::startDetached("git gui", QStringList(), "D:\MyWork\Temp\source");
if (!res) {
  // show error message
}

Я решил свою проблему, используя следующий простой сегмент кода

#include <QDir>

QDir::setCurrent("D:/MyWork/Temp/source");
system("git gui");

даже если вы используете Qt, вы все равно можете вызвать Windows API. ShellExecute сделает эту работу

#include <Windows.h>
ShellExecute(NULL, NULL, "git", "gui", NULL, SW_SHOWNORMAL);

и если ваша кодировка Unicode (широкий символ), попробуйте следующий код

#include <Windows.h>
ShellExecute(NULL, NULL, _T("git"), _T("gui"), NULL, SW_SHOWNORMAL);

вам не нужно беспокоиться о разделителе, Qt позаботится об этом для вас.

посмотреть Документ QDir

вам не нужно использовать эту функцию для построения пути к файлам. Если вы всегда используйте "/", Qt переведет ваши пути, чтобы соответствовать базовая операционная система. Если вы хотите отобразить пути к пользователю используя разделитель своей операционной системы, используйте toNativeSeparators ().

для QProcess попробуйте этот.

QProcess gitProcess;
gitProcess.setWorkingDirectory("D:/MyWork/Temp/source");
gitProcess.setProgram("git"); // hope this is in your PATH
gitProcess.setArguments(QStringList() << "gui");
gitProcess.start();
if (gitProcess.waitForStarted()) {
  // Now your app is running.
}

вместо использования system () сделайте это, чтобы вы могли оставаться в рамках QT:

QDir::setCurrent("D:/MyWork/Temp/source");
myProcess.startDetached("git gui");