I have logged process state changed event and few more. Here is the updated code and logs.
void ShutdownEventFilter::launchApp()
{
Logging::getInstance()->writeLog("ShutdownEventFilter::launchApp");
QString workingDir = "D:/Work/Qt_builds/inspirationalclips_Qt_6_8_0_MSVC2022_64bit-Debug/debug/";
QString program = "D:/Work/Qt_builds/inspirationalclips_Qt_6_8_0_MSVC2022_64bit-Debug/debug/inspirationalclips.exe";
QStringList arguments;
// Add arguments if needed, e.g., arguments << "-flag" << "value";
QProcess *process = new QProcess();
//standard output:
QObject::connect(process, &QProcess::readyReadStandardOutput, [=]() {
Logging::getInstance()->writeLog("QProcess::readyReadStandardOutput: " + process->readAllStandardOutput());
});
QObject::connect(process, &QProcess::readAllStandardOutput, [=]() {
QString strText = QString("QProcess::readAllStandardOutput: output = %1")
.arg(QString::fromUtf8(process->readAllStandardOutput()));
Logging::getInstance()->writeLog(strText);
});
//standard errors:
QObject::connect(process, &QProcess::errorOccurred, [&](QProcess::ProcessError error) {
Logging::getInstance()->writeLog("QProcess::errorOccurred: " + process->errorString());
});
QObject::connect(process, &QProcess::readyReadStandardError, [=]() {
QProcess::ProcessError procErr = process->error();
QString strErr = QMetaEnum::fromType<QProcess::ProcessError>().valueToKey(procErr);
QString strText = QString("QProcess::readyReadStandardError: error = %1").arg(strErr);
Logging::getInstance()->writeLog(strText);
});
QObject::connect(process, &QProcess::readAllStandardError, [=]() {
Logging::getInstance()->writeLog("QProcess::readAllStandardError: " + process->readAllStandardError());
});
QObject::connect(process, &QProcess::stateChanged, [&](QProcess::ProcessState state) {
QString strState = QMetaEnum::fromType<QProcess::ProcessState>().valueToKey(state);
QString strText = QString("QProcess::stateChanged: state = %1").arg(strState);
Logging::getInstance()->writeLog(strText);
});
QObject::connect(process, &QProcess::started, [=]() {
Logging::getInstance()->writeLog("QProcess::started: -----------process started---");
});
QObject::connect(process, QOverload<int, QProcess::ExitStatus>::of(&QProcess::finished),
[&](int exitCode, QProcess::ExitStatus exitStatus) {
QString strExitStatus = QMetaEnum::fromType<QProcess::ExitStatus>().valueToKey(exitStatus);
QString strText = QString("QProcess::finished: exitCode = %1 exitStatus = %2")
.arg(exitCode)
.arg(strExitStatus);
Logging::getInstance()->writeLog(strText);
});
process->setWorkingDirectory(workingDir);
process->start(program, arguments);
if (!process->waitForStarted()) {
qDebug() << "Error starting application:" << process->errorString();
Logging::getInstance()->writeLog("Error starting application: " + process->errorString());
}
//print current state
QProcess::ProcessState state = process->state();
QString strState = QMetaEnum::fromType<QProcess::ProcessState>().valueToKey(state);
QString strText = QString("ShutdownEventFilter::state = %1").arg(strState);
Logging::getInstance()->writeLog(strText);
//print error if any:
QProcess::ProcessError procErr = process->error();
QString strErr = QMetaEnum::fromType<QProcess::ProcessError>().valueToKey(procErr);
strText = QString("ShutdownEventFilter::error = %1").arg(strErr);
Logging::getInstance()->writeLog(strText);
// The process will continue to run independently
// if you need to interact with it, use other QProcess methods
Logging::getInstance()->writeLog("ShutdownEventFilter::launchApp----------running------");
}
Here is the updated log file:
2025-05-15 15:05:49: ShutdownEventFilter::launchApp
2025-05-15 15:05:49: QProcess::stateChanged: state = Starting
2025-05-15 15:05:49: QProcess::stateChanged: state = Running
2025-05-15 15:05:49: QProcess::started: -----------process started---
2025-05-15 15:05:49: ShutdownEventFilter::state = Running
2025-05-15 15:05:49: ShutdownEventFilter::error = UnknownError
2025-05-15 15:05:49: ShutdownEventFilter::launchApp----------running------
2025-05-15 15:05:51: QProcess::stateChanged: state = NotRunning
2025-05-15 15:05:51: QProcess::finished: exitCode = 255 exitStatus = NormalExit
This logs shows process started and then goto ''Running' state and then Unknown error occurred and process terminated.