前言
最近帮朋友写小工具,其中涉及到显示命令行控制台,没想到理所当然的,变得不那么理所当然了。
实现的几种方式
方式一(QProcess)
用QProcess实现是我当时想到的第一种方式,可能是之前一直用QProcess执行命令行。
本来以为一行代码就可以实现,如下,毕竟之前用它调用外部程序时,都是可以的。
QProcess::execute("cmd.exe");
然后发现是不行的,程序(cmd.exe)是运行了,但是没有显示界面。我百度查找问题解决方法,找到了这个qt - QProcess with 'cmd' command does not result in command-line window - Stack Overflow
需要通过函数setCreateProcessArgumentsModifier来设置参数,创建一个新的控制台
m_pPro->setCreateProcessArgumentsModifier(
[](QProcess::CreateProcessArguments *args) {
args->flags |= CREATE_NEW_CONSOLE;
args->startupInfo->dwFlags &=~ STARTF_USESTDHANDLES;
});
方式二(system())
使用函数system()来实现,我差了下system的入参是 DOS命令
#include<stdlib.h>
system("cmd.exe");
方式三(QDesktopServices::openUrl())
静态函数QDesktopServices::openUrl()可以打开本地文件、文件夹、应用或者用默认浏览器打开网址。
//QString path="https://blog.csdn.net/xiaopei_yan?type=blog";
//QString path="C:/Users/admin/Desktop";
QString path="cmd.exe";
QDesktopServices::openUrl(QUrl::fromLocalFile(path));
方式四(CreateProcess())
windows 自带的方法创建进程CreateProcess(),具体用法可参考19.VC(custom)-CreateProcess函数详解_花熊的博客-CSDN博客
TCHAR szCmdLine[] = { TEXT("cmd.exe") };
STARTUPINFO StartInfo = { sizeof(StartInfo) };
PROCESS_INFORMATION ProcInfo;
StartInfo.dwFlags = STARTF_USESHOWWINDOW;
StartInfo.wShowWindow = TRUE;
CreateProcess(NULL, szCmdLine, NULL, NULL, NULL, NULL, NULL, NULL, &StartInfo, &ProcInfo);
结束语
各种方式,任君挑选。