Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/147.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将QProcess readAll响应输出到标签_C++_Qt_Qprocess_Qlabel - Fatal编程技术网

C++ 将QProcess readAll响应输出到标签

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,我想在其中以标签的形式输出响应。首先,以下是我尝试过的:

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!