使用Qt写入终端

时间:2014-07-02 11:47:23

标签: linux qt qprocess

我需要通过Qt向终端输入来执行终端命令。我也想阅读输出。我找到了一个适用于Windows的解决方案(QProcess problems, output of process)。这是代码:

#include <QtCore/QCoreApplication>
#include <QTextStream>
#include <QByteArray>
#include <QString>
#include <QProcess>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    QTextStream qout(stdout);
    QByteArray result;
    QProcess cmd2;

    cmd2.setReadChannel(QProcess::StandardOutput);
    cmd2.setProcessChannelMode(QProcess::MergedChannels);
    cmd2.start("cmd");
    if (!cmd2.waitForStarted()){
        qout << "Error: Could not start!" << endl;
        return 0;
    }
    cmd2.write("ipconfig\n");
    cmd2.closeWriteChannel();   //done Writing

    while(cmd2.state()!=QProcess::NotRunning){
        cmd2.waitForReadyRead();
        result = cmd2.readAll();
        qout << result;
    }
    qout << endl << "---end----" << endl;
    return a.exec();
}

在ubuntu中,我将“cmd”更改为“xterm”,将“ipconfig”更改为“ifconfig”,但它无效!

1 个答案:

答案 0 :(得分:0)

好的,我找到了解决方案。使用bash而不是xterm。我真的不确定为什么会这样。我的猜测是,当我使用xterm时,它打开了一个单独的窗口,并且xterm进程与thr主进程分离。但是在bash中,它在与qt控制台应用程序相同的终端中执行所有操作。