【问题标题】:Qt launch cmd.exeQt 启动 cmd.exe
【发布时间】:2013-02-20 17:08:34
【问题描述】:

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

【问题讨论】:

    标签: c++ windows qt process cmd


    【解决方案1】:

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

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

    【讨论】:

    • 在 Qt Creator 的“SerialPort”示例部分,有一个非常好的示例,说明如何创建从 QPlainTextEdit 重新调整用途的控制台窗口,仅供参考。
    【解决方案2】:

    您也可以在 Qt 中与 GUI 一起启用控制台。

    Console output in a Qt GUI app?

    然后使用qDebug 调用将文本输出到调试窗口或使用iostreamstd::coutstd::cin

    编辑: 要显示控制台,请在您的 .pro 中添加“CONFIG += 控制台”,然后在您的项目 > 运行设置中,确保选中“在终端中运行”。

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

    【讨论】:

    • 我不需要在控制台窗口中打印任何内容。而且我没有看到我在任何地方提到过任何有问题的事情。我需要的只是运行一个可见的 cmd.exe 窗口并与之交互。
    • 您希望控制台窗口可见但不想打印到它? “与之互动”是什么意思?
    猜你喜欢
    • 2011-05-16
    • 2013-03-21
    • 2012-01-17
    • 2012-07-01
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多