QProcess nos permite tratar procesos como dispositivos de E/S secuenciales. Debido a que QProcess hereda de la clase QIODevice, podemos leer y escribir en el proceso como si usáramos QTcpSocket para acceder a una conexión de red. Luego puede llamar a write() para escribir en la entrada estándar del proceso y a read(), readLine() y getChar() para leer la salida estándar. Debido a que hereda QIODevice, QProcess también se puede usar como fuente de entrada para QXmlReader o para generar datos que se cargarán usando QNetworkAccessManager.
Cuando el proceso externo sale, QProcess vuelve a entrar en el estado NotRunning (estado inicial) y emite la señal terminado ().
La señal de terminado () proporciona el código de salida y el estado de salida del proceso como parámetros. También puede llamar a exitCode () para obtener el código de salida del último proceso completado y llamar a exitStatus () para obtener su estado de salida.
Si ocurre un error en cualquier momento, QProcess emitirá la señal erroroccurs(). También puede llamar a error() para encontrar el tipo de error que ocurrió la última vez y llamar a state() para encontrar el estado del proceso actual.
——————————————
Declaración de derechos de autor: este artículo es un artículo original del blogger de CSDN "Solar Storm" y sigue el acuerdo de derechos de autor CC 4.0 BY-SA. Adjunte el enlace de la fuente original y esta copia. al reimprimir la declaración.
Enlace original: https://blog.csdn.net/qq_43680827/article/details/129440680
1. Puede consultar el enlace correspondiente: https://doc.qt.io/Qt-5/qprocess.html#finished
2. Preste atención a las siguientes 4 señales cuando las use: use start (), de lo contrario habrá problemas con el inicio.
Preste atención a la diferencia entre start() y startDetached() aquí: https://blog.csdn.net/kucoffee12/article/details/75200101
Las siguientes 4 señales relacionadas con el inicio: (las siguientes son vinculaciones)
QProcess *proceso = nuevo QProcess;
conectar(proceso, SEÑAL(readyReadStandardOutput()), esto, RANURA(redFromStdOut()));
conectar(proceso, SEÑAL(readyReadStandardError()), esto, RANURA(redFromStdErr()));
conectar (proceso, SEÑAL(error(QProcess::ProcessError)), this, SLOT(processError(QProcess::ProcessError)));
connect(proceso, SEÑAL(terminado(int,QProcess::ExitStatus)), this, SLOT(processFinished (int,QProcess::ExitStatus)));
El programa finaliza de forma normal o anormal. La estructura es la siguiente:
enum ExitStatus { NormalExit, CrashExit }; void MainWindow::processFinished(int exitCode, QProcess::ExitStatus exitStatus) { if(exitStatus == QProcess::NormalExit) { //El programa finaliza normalmente } else { //El programa finaliza de forma anormal } } Después de ingresar el final normal, puede juzgar que el programa exe llamado se ha completado, de esta manera puede saber cuándo termina el programa de ejecución llamado;