QProcess读写

时间:2011-02-09 19:32:10

标签: qt qprocess

我正在尝试从qprocess读取和写入。我做了一个小测试程序,接受输入并在循环中重新显示在屏幕上。这是我的Qt代码

  QString path = "./test";

        tcd = new QProcess(this);
        QStringList args;
        args << "";
        tcd->start(path,args);

        if(!tcd->waitForStarted(3000))
        {
            stdoutput->append("<h1><font color=red>There was a problem starting the software, please try running the program again.</font></h1>");

        }
        tcd->write("hello\n");
        tcd->write("hello\n");
        tcd->write("hello\n");
        tcd->write("hello\n");
        //tcd->write("quit\n");

QObject::connect(tcd, SIGNAL(readyReadStandardOutput()), this, SLOT(appendTextBox()));

除非我发送最后一次退出命令(终止我的测试程序),否则这将无效。

这是我的阅读命令:

void TCD2_GUI::appendTextBox(){
    stdoutput->append("new output available: \n");
    QByteArray newData = tcd->readAllStandardOutput();
    stdoutput->append(QString::fromLocal8Bit(newData));
}

如果我发送退出,我会立即从程序中获取所有输出,包括我发送的所有内容。

我在这里做错了什么?

根据要求,以下是该计划的代码:

int main(int argC[], char* argV[]){
    printf("Welcome!\n");
    char* input = malloc(160);
    gets(input);

    while(strcmp(input,"quit") != 0)
    {
        printf("Got input %s\n", input);
        gets(input);

    }

}

1 个答案:

答案 0 :(得分:1)

来自doc:

  

QIODevice的某些子类,例如   作为QTcpSocket和 QProcess ,是   异步。这意味着I / O.   write()或read()等函数   总是立刻回来,而   与设备本身通信   当控制权回归时,可能会发生   事件循环。 QIODevice提供   允许你强制的功能   这些操作要执行   立即,同时阻止了   调用线程而不进入   事件循环。

     

...

     

waitForBytesWritten() - 这个函数   暂停呼叫中的操作   线程,直到一个数据有效负载   已被写入设备。

     

...

     

从主要调用这些函数,   GUI线程,可能会导致您的用户   界面冻结。

link