gpt4 book ai didi

c++ - Qt - 如何将 QProcess 的标准输出重定向到 TextEdit

转载 作者:行者123 更新时间:2023-11-28 02:15:10 26 4
gpt4 key购买 nike

我正在尝试打印使用 wget 下载网站的过程输出在小部件 (textEdit) 中,但它不打印任何内容,但在终端中它可以工作。

示例

命令:

wget --no-clobber --convert-links --random-wait -r -p -E -e robots=off -U mozilla http://site/path`

输出:

Resolving ******... 54.239.26.173
Connecting to *****|54.239.26.173|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [text/html]
Saving to: ‘/index.html’
...

我的代码:

void downloadWebsite::on_pushButton_clicked()
{
input = ui->lineEdit->text();
if(input.isEmpty())
QMessageBox::information(this,"Error","Not an url / webpage !");
else{
QProcess *getDownload = new QProcess(this);
getDownload->setProcessChannelMode(QProcess::MergedChannels); //it prints everything , even errors
QString command = "wget --no-clobber --convert-links --random-wait -r -p -E -e robots=off -U mozilla " + input;
getDownload->start("sh",QStringList() << "-c" <<"cd ;"+command);


QByteArray outputLog = getDownload->readAllStandardOutput();
getDownload->waitForFinished();
getDownload->close();

QString outputToString(outputLog);
ui->textEdit->setText(outputToString);

}
}

我做错了什么?

谢谢。

最佳答案

连接信号readyReadStandardOutput .更像这样的东西(但未经测试):

connect(getDownload, SIGNAL(readyReadStandardOutput()), this, SLOT(readOutput()));

当然应该在开始之前调用connect。和信号处理程序:

void downloadWebsite::readOutput(){
while(getDownload->canReadLine()){
ui->textEdit->setText(getDownload->readLine());
}
// somebuffer.append(getDownload->readAllStandardOutput());
}

您还可以看到 canReadLine 应该被调用,所以 getDownload 必须可用。

关于c++ - Qt - 如何将 QProcess 的标准输出重定向到 TextEdit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34245235/

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