Вопрос:
Мне нужно запустить следующую команду с помощью Qt, которая откроет окно Git GUI.
D:MyWorkTempsource>git gui
Как это сделать?
Я попробовал следующее, но это не сработало:
QProcess process; process.start(«git gui»,QStringList() << «D:MyWorkTempsource>»); Лучший ответ:
Я решил свою проблему, используя следующий простой сегмент кода
#include <QDir> QDir::setCurrent(«D:/MyWork/Temp/source»); system(«git gui»); Ответ №1
Попробуйте следующее:
QProcess process; process.setWorkingDirectory(«D:\MyWork\Temp\source»); process.start(«git», QStringList() << «gui»);
Или если вы хотите сделать это в одной строке, вы можете сделать это (здесь мы используем startDetached вместо start):
QProcess::startDetached(«git», QStringList() << «gui», «D:\MyWork\Temp\source»);
Во втором случае лучше проверить код возврата (чтобы показать сообщение об ошибке, если ваша программа не может запускать внешнюю программу). Также вы можете поместить все аргументы в первую строку program (т.е. process.start(«git gui»); тоже):
bool res = QProcess::startDetached(«git gui», QStringList(), «D:\MyWork\Temp\source»); if (!res) { // show error message } Ответ №2
Даже если вы используете Qt, вы все равно можете вызвать Windows API. ShellExecute выполнит это задание
#include <Windows.h> ShellExecute(NULL, NULL, «git», «gui», NULL, SW_SHOWNORMAL);
И если ваша кодировка – Unicode (Wide Char), попробуйте выполнить следующий код
#include <Windows.h> ShellExecute(NULL, NULL, _T(«git»), _T(«gui»), NULL, SW_SHOWNORMAL); Ответ №3
Вам не нужно беспокоиться о разделителе, 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. } Ответ №4
Вместо использования system() сделайте это, чтобы вы могли оставаться в рамках QT:
QDir::setCurrent(«D:/MyWork/Temp/source»); myProcess.startDetached(«git gui»);