Как запустить команду 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");