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

Вопрос:Мне нужно запустить следующую команду с помощью Qt, которая откроет окно Git GUI. D:MyWorkTempsource>git gui Как это сделать? Я попробовал следующее, но это не сработало: QProcess process; process.start("git gui",QStringList()

Вопрос:

Мне нужно запустить следующую команду с помощью 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»);

Оцените статью
Добавить комментарий