0

我想从没有开始cmd.exe,因为我需要与正在运行的 cmd 交互。并且 cmd 必须在前台。我想在第一个进程完成后获取,然后我将执行一些其他任务,例如显示一些消息框或启动另一个 cmd.exe 或在该 cmd 窗口中执行另一个命令。但是 cmd 窗口必须对用户可见。QProcessstartDetachedreadyRead()

4

2 回答 2

1

听起来您想运行一个(或多个)命令行进程,在运行时显示其输出,然后在完成后运行另一个进程。

我通常通过在我的主窗口中有一个只读的QPlainTextEdit来将 io 显示到命令行来做到这一点。在堆上创建一个QProcessconnect ,它的readyReadStandardErrorreadyReadStandardOutput信号发送到主窗口中的一个槽,该槽将文本打印到 QPlainTextEdit。然后使用QProcess::start参数启动命令行程序并等待它完成。完成后,以相同的方式开始下一个过程。

于 2013-02-20T21:12:41.743 回答
0

您也可以在 GUI 旁边启用 Qt 中的控制台。

Qt GUI 应用程序中的控制台输出?

然后使用qDebug调用将文本输出到调试窗口或iostream使用std::coutand 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 循环从主线程移到另一个线程中.

于 2013-02-20T17:39:03.557 回答