如何使用Qt运行windows cmd命令
How to run a windows cmd command using Qt?
我必须使用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");
相关文章:
- 使用 system() 函数在C++程序中运行 cmd 命令
- 相同的CMD命令执行两种不同的事情
- ShellExecute 中的 cmd 命令
- 如何在C++上以管理员身份运行cmd命令
- cmd 命令启动无法与新版本的 mingw32-make.exe一起使用?
- 如何使用Qprocess执行CMD命令
- 运行CMD命令并将结果获取到字符串变量
- ShellExecute和CMD命令之间有什么区别,如果有的话
- C++执行CMD命令
- 随时随地运行,使用 C++ 更改 CMD 命令
- 如何在 c++ 中使用 CMD 命令
- wince7中的cmd命令
- 在C++中使用system()运行2个或多个cmd命令
- 如何使用C++Lib函数或Windows API在一个会话中执行多个cmd命令
- 如何使用Qt运行windows cmd命令
- c++禁止使用CMD命令
- 无法将cmd命令作为TCHAR传递
- 多个CMD命令管理c++(或c#)
- 使用C++执行CMD命令
- 是否有可能从c++程序中输出一个变量作为cmd命令?