如何检查QProcess是否正确执行?

kar*_*ary 1 c++ linux qt

QProcess process_sdcompare;
QString command_sdcompare;
QStringList args_sdcompare;

command_sdcompare = "diff";
args_sdcompare << "Filename" << "Filename";

process_sdcompare.start(command_sdcompare,args_sdcompare,QIODevice::ReadOnly);
process_sdcompare.waitForFinished();                                        
QString StdOut_sdcompare = process_sdcompare.readAllStandardOutput(); //Reads standard output
QString StdError_sdcompare = process_sdcompare.readAllStandardError(); //Reads standard error

if(StdOut_sdcompare.isEmpty())  //the process output is checked here if empty it is a success
    return 1;
Run Code Online (Sandbox Code Playgroud)

我正在运行上面的代码.当我在比较不相似的文本文件后检查错误情况时,isEmpty()返回false.

如何检查QProcess执行是否没有错误?

cod*_*der 5

QProcess::error()用来查询最后一个错误(用于快速调试),但是这是一个"更好"的方法:

// capture any errors (do this before you run the process)
connect(&process_sdcompare, &QProcess::errorOccurred, this, &ThisClass::processError);
Run Code Online (Sandbox Code Playgroud)

然后定义插槽:

ThisClass::processError(QProcess::ProcessError error)
{
    qDebug() << "error enum val = " << error << endl;
}
Run Code Online (Sandbox Code Playgroud)

更新

或者使用Lambda:

// No need to define a slot function...
connect(&process_sdcompare, &QProcess::errorOccurred, [=](QProcess::ProcessError error) 
{ 
    qDebug() << "error enum val = " << error << endl; 
});
Run Code Online (Sandbox Code Playgroud)

  • 在我看来,代码可能更整洁,如果你连接到lambda函数(Qt 5)而不是必须定义槽,但除此之外,是的,它是要走的路; O) (2认同)