C++ 将QProcess readAll响应输出到标签
我有一个QProcess,我想在其中以标签的形式输出响应。首先,以下是我尝试过的:C++ 将QProcess readAll响应输出到标签,c++,qt,qprocess,qlabel,C++,Qt,Qprocess,Qlabel,我有一个QProcess,我想在其中以标签的形式输出响应。首先,以下是我尝试过的: QProcess *proc = new QProcess(); proc->setProcessChannelMode(QProcess::MergedChannels); proc->start(cmdLineRequest.toUtf8().constData()); // cmdLineRequest is omitted if (!proc->waitForFinished()) {
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");
}
这看起来很奇怪,因为我使用setPixmap(QPixmap::frommage(image))在几乎相同的事情中向标签添加图片
感谢您的帮助
更新:
如果在上述代码块所属的方法末尾之前添加QMessageBox,则可以看到添加到标签的文本。但是,当我关闭QMessageBox时,文本将消失。我是否使用proc->readAll()为标签提供地址位置,或者为什么会出现这种行为?谢谢。您应该收听
readyReadStandardOutput
()信号,并在收到信号时调用readAll()
或者你可以打电话
bool waitForReadyRead(int msecs = 30000)
在调用
readAll
()。之前,您应该收听readyReadStandardOutput
()信号,并在收到信号时调用readAll()
或者你可以打电话
bool waitForReadyRead(int msecs = 30000)
在调用
readAll
()之前,这里的问题是调用proc->readAll两次;第一个用于qDebug输出,然后再次用于标签上设置的字符串
{
qDebug() << "Make output:" << proc->readAll();
ui->topBarcode->setText(QString(proc->readAll()) + "asdf");
}
{
qDebug()topBarcode->setText(QString(proc->readAll())+“asdf”);
}
我希望QProcess是一个QIODevice,它返回一个缓冲字节数组。当您读取它时,它会将其从缓冲区中移除
因此,在调用qDebug并将字符串设置为标签之前,创建一个临时字符串并读取缓冲区一次:-
{
QString output = proc->readAll();
qDebug() << "Make output:" << output;
ui->topBarcode->setText(output + "asdf");
}
{
QString输出=proc->readAll();
qDebug()setText(输出+“asdf”);
}
这里的问题是您两次调用proc->readAll;第一个用于qDebug输出,然后再次用于标签上设置的字符串
{
qDebug() << "Make output:" << proc->readAll();
ui->topBarcode->setText(QString(proc->readAll()) + "asdf");
}
{
qDebug()topBarcode->setText(QString(proc->readAll())+“asdf”);
}
我希望QProcess是一个QIODevice,它返回一个缓冲字节数组。当您读取它时,它会将其从缓冲区中移除
因此,在调用qDebug并将字符串设置为标签之前,创建一个临时字符串并读取缓冲区一次:-
{
QString output = proc->readAll();
qDebug() << "Make output:" << output;
ui->topBarcode->setText(output + "asdf");
}
{
QString输出=proc->readAll();
qDebug()setText(输出+“asdf”);
}
当您声明“它不工作”时,您的意思是什么?它是否没有编译,或者得到的输出与您期望的不同?使用字符串构造函数从字节数组创建QString是完全合法的:QString(constqbytearray&ba)对不起,我不清楚。它可以编译,只是文本没有附加到标签上。当你说“它不工作”时,你是什么意思?它是否没有编译,或者得到的输出与您期望的不同?使用字符串构造函数从字节数组创建QString是完全合法的:QString(constqbytearray&ba)对不起,我不清楚。它可以编译,只是文本没有附加到标签上。谢谢你的回答。我尝试了waitForReadyRead(),不幸的是没有任何运气。我刚刚发现,如果我添加一个QMessageBox,我可以在标签中看到输出文本,但是当我关闭messagebox时,文本消失了。请查看我在问题中添加的编辑。谢谢您的回答。我尝试了waitForReadyRead(),不幸的是没有任何运气。我刚刚发现,如果我添加一个QMessageBox,我可以在标签中看到输出文本,但是当我关闭messagebox时,文本消失了。请查看我在问题中添加的编辑。有意义!谢谢你,梅林069!有道理!谢谢你,梅林069!