0
我想運行一個QProcess中(程序ADB),當過程結束後結果返回給調用函數。但是,adb可能會發現自己處於循環狀態,並將諸如「ADB服務器未確認」之類的錯誤消息打印到標準輸出,而不是完成。我需要捕捉這些錯誤。監控運行QProcess中和返回值時QProcess中完成
QProcess run_command;
connect(&run_command,SIGNAL(readyReadStandardOutput()),this,SLOT(dolog()));
QString result=RunProcess("adb connect 192.168.1.100");
...
QString MainWindow::RunProcess(QString cstring)
{
run_command.start(cstring);
// keep gui active for lengthy processes.
while(run_command.state() != QProcess::NotRunning)
qApp->processEvents();
QString command=run_command.readAll();
return command; // returns nothing if slot is enabled.
}
void MainWindow::dolog()
{
QString logstring = run_command.readAllStandardOutput();
if (logstring.contains("error condition")
logfile("Logfile:"+logstring);
}
如果啓用標準輸出到一個日誌文件信號/槽,dolog()打印,但RunProcess返回空字符串。如果我禁用信號/插槽,RunProcess()將按照預期返回qprocess輸出。
忘記'processEvents()'存在。 99%的時間使用錯了,這就是這種情況。你可以編寫完美的應用程序,數十萬行,甚至一次都不會調用它。如果你想運行一個進程並得到它的輸出,你應該爲進程的相關信號附加一個或多個插槽。您也不想使用'readAllStandardOutput',但是通過執行'while(run_command.canReadLine()){auto line = run_command.readLine(); '' –