最近帮朋友写小工具,其中涉及到显示命令行控制台,没想到理所当然的,变得不那么理所当然了。
用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的入参是 DOS命令
- #include
-
- system("cmd.exe");
-
静态函数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));
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);
各种方式,任君挑选。