gpt4 book ai didi

c++ - 输出 QProcess readAll 对标签的响应

转载 作者:行者123 更新时间:2023-11-30 01:53:55 26 4
gpt4 key购买 nike

我有一个 QProcess,我想在其中输出标签中的响应。首先,这是我尝试过的:

QProcess *proc = new QProcess();
proc->setProcessChannelMode(QProcess::MergedChannels);
proc->start(cmdLineRequest.toUtf8().constData()); // cmdLineRequest is omitted

if (!proc->waitForFinished()) {
qDebug() << "Make failed:" << proc->errorString();
ui->topBarcode->setText(QString(proc->errorString()));
} else {
qDebug() << "Make output:" << proc->readAll();

ui->topBarcode->setText(QString(proc->readAll()) + "asdf");
}

proc->readAll() 是一个 QByteArray,setText 接受一个 QString。从我读过的内容来看,我应该能够将 QByteArray 转换为 QString,但是它不起作用。我还尝试用 QString 类转换 proc->readAll()

->setText(QString::fromUtf8(proc->readAll())) // not working
->setText(QString::fromLatin1(proc->readAll())) // not working
->setText(QString::fromLocal8Bit(proc->readAll())) // not working
... etc ...

这看起来很奇怪,因为我使用 setPixmap(QPixmap::fromImage(image)) 以几乎相同的方式将图片添加到标签

感谢任何帮助,谢谢。

更新:

如果我在上面的代码块所属的方法结束之前添加一个 QMessageBox,我可以看到添加到标签的文本。然而,当我关闭 QMessageBox 时,文本消失了。我是否使用 proc->readAll() 为标签提供了地址位置,或者为什么会出现这种行为?谢谢。

最佳答案

这里的问题是你调用了 proc->readAll 两次;第一个用于 qDebug 输出,然后再次用于您在标签上设置的字符串。

{
qDebug() << "Make output:" << proc->readAll();
ui->topBarcode->setText(QString(proc->readAll()) + "asdf");
}

我希望 QProcess 是一个 QIODevice,它返回一个缓冲的字节数组。当您读取它时,它会将其从缓冲区中删除。

因此,在调用 qDebug 并将字符串设置为标签之前,创建一个临时字符串并读取缓冲区一次:-

{
QString output = proc->readAll();
qDebug() << "Make output:" << output;
ui->topBarcode->setText(output + "asdf");
}

关于c++ - 输出 QProcess readAll 对标签的响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22623373/

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