Qt启动cmd.exe

时间:2013-02-20 17:08:34

标签: c++ windows qt process cmd

我希望cmd.exe使用QProcess而不是startDetached,因为我需要与正在运行的cmd进行交互。并且cmd必须是forground。我想在第一个进程完成后得到readyRead()然后我会做一些其他任务,比如显示一些消息框或启动另一个cmd.exe或在该cmd窗口中执行另一个命令。但是cmd窗口必须对用户可见。

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

Console output in a Qt GUI app?

然后使用qDebug调用将文本输出到调试窗口,或者使用iostreamstd::cout使用std::cin

编辑: 要显示控制台,请在.pro中添加“CONFIG + = console”,然后在Project>中添加运行设置,请务必选中“在终端中运行”。

EDIT2:

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运行它,你将需要在从主要的循环中移动它在另一个线程中。