如何使用Qt运行Windows cmd命令?

问题描述 投票:0回答:6

我必须使用 Qt 运行以下命令,这将弹出 Git GUI 窗口。

D:\MyWork\Temp\source>git gui

我该怎么做?

我尝试了以下方法,但没有成功:

QProcess process;   
process.start("git gui",QStringList() << "D:\MyWork\Temp\source>");
c++ qt qprocess
6个回答
3
投票

试试这个:

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
}

3
投票

我使用以下简单的代码段解决了我的问题

#include <QDir>

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

2
投票

即使您使用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);

1
投票

您无需担心分隔符,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.
}

1
投票

我知道这篇文章现在有点旧了,但我知道伊利亚的答案有什么问题(据我理解)。由于

QProcess
是在本地范围内创建的,因此每当您调用范围之外的进程时,析构函数都会被自动调用,并一路终止该进程,如调试消息所示:

进程(“git”)仍在运行时被销毁。

解决此问题的一种方法是在堆上实际动态分配

QProcess
的实例。确保进程完成后释放内存。

QProcess* process = new QProcess;
process->setWorkingDirectory("D:\\MyWork\\Temp\\source");
process->start("git", QStringList() << "gui");

或者等待该过程完成,使用

process.waitForFinished (-1);

我希望这对在这篇文章中寻找正确答案的人有所帮助。


0
投票

不要使用 system() 这样做,这样你就可以留在 QT 框架内:

QDir::setCurrent("D:/MyWork/Temp/source");
myProcess.startDetached("git gui");
© www.soinside.com 2019 - 2024. All rights reserved.