gpt4 book ai didi

Qt:有没有办法在 QProcess 将一行写入 stdout 时发送信号

转载 作者:行者123 更新时间:2023-12-04 13:21:25 24 4
gpt4 key购买 nike

我发现了类似的问题,但从来没有确切的答案。我有启动 QProcess 并将输出写入 QTextEdit 框的 Qt 程序,到目前为止一切顺利。但只有在程序结束时才会这样做。如果可能的话,我希望实时打印程序标准输出。在理想的世界中,当有一行准备好读取时,QProcess 会发出某种信号,如果 QProcess 不可能的话,这可能吗?同样理想情况下,您仍然可以在进程运行时使用程序的其余部分。

这是我到目前为止的一些代码,非常简单,它只是将 QProcess 标准输出的第一行发送到 QTextEdit

...
extProcess::extProcess(QObject *parent) :
QObject(parent)
extProcess::extProcess(QObject *parent) :
QObject(parent)
{
proc = new QProcess(this); //initialize proc
arguments << "-v";
connect(proc, SIGNAL(readyRead()), this, SLOT(logReady()));

}

void extProcess::startProcess()
{
emit clearLog();
emit outLog("--Process started--");
proc->start("/Users/jonathan/Desktop/testgg");
}

void extProcess::logReady()
{
emit outLog(proc->readLine());
}
...

这是我试过的替代版本,这将显示整个 QProcess 输出,但仍然
仅在程序完成时显示它。
    ...
extProcess::extProcess(QObject *parent) :
QObject(parent)

{
proc = new QProcess(this); //initialize proc
proc->setProcessChannelMode(QProcess::SeparateChannels);
arguments << "-v";
connect(proc, SIGNAL(readyReadStandardOutput()), this, SLOT(logReady()));

}


void extProcess::logReady()
{

while(proc->bytesAvailable()){
emit outLog(proc->readLine());
}
}



void extProcess::startProcess()
{
emit clearLog();
emit outLog("--Process started--");
proc->start("/Users/jonathan/Desktop/testgg");
}



void extProcess::killProcess()
{
proc->terminate();
emit clearLog();
emit outLog("--Process Terminated--");
}
....

谢谢

最佳答案

我将 readAllStandardOutput() 用于这个确切目的,它对我有用。

但是我确实注意到它不会收到任何标准输出,直到进程实际刷新其输出缓冲区(“\n”可能不会自动执行此操作,至少在我完全特定于平台的 Windows 体验中不会)。

根据子进程如何写入其输出(C 应用程序或 C++ 应用程序),它需要分别调用 fflush(stdout); 或使用 std::endl; 结束行。

关于Qt:有没有办法在 QProcess 将一行写入 stdout 时发送信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6279182/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com