我想从没有开始cmd.exe
,因为我需要与正在运行的 cmd 交互。并且 cmd 必须在前台。我想在第一个进程完成后获取,然后我将执行一些其他任务,例如显示一些消息框或启动另一个 cmd.exe 或在该 cmd 窗口中执行另一个命令。但是 cmd 窗口必须对用户可见。QProcess
startDetached
readyRead()
2 回答
听起来您想运行一个(或多个)命令行进程,在运行时显示其输出,然后在完成后运行另一个进程。
我通常通过在我的主窗口中有一个只读的QPlainTextEdit来将 io 显示到命令行来做到这一点。在堆上创建一个QProcessconnect
,它的readyReadStandardError和readyReadStandardOutput信号发送到主窗口中的一个槽,该槽将文本打印到 QPlainTextEdit。然后使用QProcess::start参数启动命令行程序并等待它完成。完成后,以相同的方式开始下一个过程。
您也可以在 GUI 旁边启用 Qt 中的控制台。
然后使用qDebug
调用将文本输出到调试窗口或iostream
使用std::cout
and std::cin
。
编辑:要显示控制台,请在您的 .pro 中添加“CONFIG += 控制台”,然后在您的项目 > 运行设置中,确保选中“在终端中运行”。
编辑2:
https://www.google.com/search?q=qprocess+cmd
http://www.qtcentre.org/threads/12757-QProcess-cmd
#include <QByteArray>
#include <QProcess>
#include <iostream>
#include <string>
using namespace std;
int main(int argc,char** argv)
{
QProcess cmd;
cmd.start("cmd");
if (!cmd.waitForStarted())
return false;
cmd.waitForReadyRead();
QByteArray result = cmd.readAll();
cout << result.data();
string str;
getline(cin,str);
while(str != string("exit"))
{
cmd.write(str.c_str());
cmd.write("\n");
cmd.waitForReadyRead();
result = cmd.readAll();
cout << result.data();
getline(cin,str);
}
}
我在这里测试了代码,它允许您与命令行交互并通过 readyread() 获取输出,但是如果您使用 GUI 运行它,则需要将这个 while 循环从主线程移到另一个线程中.