如何使用Qt运行windows cmd命令

How to run a windows cmd command using Qt?

本文关键字:cmd 命令 windows 运行 何使用 Qt      更新时间:2023-10-16

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

D:MyWorkTempsource>git gui

我该怎么做?

我尝试了以下操作,但没有成功:

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

试试这个:

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
}

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

#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将转换您的路径以符合底层操作系统。如果要显示用户的路径使用操作系统的分隔符使用NativeSeparators()。

对于你的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.
}

我知道这篇文章现在有点过时了,但我知道Ilya的回答出了什么问题(据我所知)。由于QProcess是在本地作用域内创建的,因此无论何时调用作用域外的进程,都会自动调用析构函数,并在过程中杀死该进程,正如调试消息所暗示的那样:

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

解决此问题的一种方法是在堆上动态分配QProcess的实例。请确保在进程结束后释放内存。

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

或者使用等待处理完成

process.waitForFinished (-1);

我希望这将有助于任何人在这篇文章中寻找正确的答案。

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

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