From 74978025fb3aadbf10c0f4b18b24ec9080d23539 Mon Sep 17 00:00:00 2001 From: Andreas Suter Date: Tue, 13 Feb 2024 10:12:50 +0100 Subject: [PATCH] start musrview as detached process: simplifies things. --- src/musredit_qt5/musredit/PTextEdit.cpp | 31 ++++---------------- src/musredit_qt5/musredit/PTextEdit.h | 1 - src/musredit_qt6/musredit/PTextEdit.cpp | 38 +++++++------------------ src/musredit_qt6/musredit/PTextEdit.h | 1 - 4 files changed, 15 insertions(+), 56 deletions(-) diff --git a/src/musredit_qt5/musredit/PTextEdit.cpp b/src/musredit_qt5/musredit/PTextEdit.cpp index 48a0a7f3..72a957d4 100644 --- a/src/musredit_qt5/musredit/PTextEdit.cpp +++ b/src/musredit_qt5/musredit/PTextEdit.cpp @@ -2555,9 +2555,7 @@ void PTextEdit::musrView() if (fAdmin->getMusrviewShowOneToOneFlag()) arg << "-1"; - QProcess *proc = new QProcess(this); - connect(proc, SIGNAL(finished(int, QProcess::ExitStatus)), this, SLOT(musrViewFinished(int, QProcess::ExitStatus))); - + QProcess proc; // make sure that the system environment variables are properly set QProcessEnvironment env = QProcessEnvironment::systemEnvironment(); #if defined(Q_OS_DARWIN) @@ -2565,34 +2563,15 @@ void PTextEdit::musrView() #else env.insert("LD_LIBRARY_PATH", env.value("ROOTSYS") + "/lib:" + env.value("LD_LIBRARY_PATH")); #endif - proc->setProcessEnvironment(env); - proc->setWorkingDirectory(workDir); - proc->start(cmd, arg); - if (!proc->waitForStarted()) { - // error handling - QString msg(tr("Could not execute the output command: ")+cmd[0]); - QMessageBox::critical( nullptr, - tr("Fatal error"), - msg, - tr("Quit") ); - return; - } -} - -//---------------------------------------------------------------------------------------------------- -/** - *

Checks if musrview terminated with error, and if yes pop up a message box. - * @param exitCode - */ -void PTextEdit::musrViewFinished(int exitCode, QProcess::ExitStatus) -{ - if (exitCode != 0) { + proc.setProgram(cmd); + proc.setProcessEnvironment(env); + if (!proc.startDetached(cmd, arg, workDir)) { QString msg = QString("musrview failed. Possible reasons:\n"); msg += QString("* corrupted msr-file.\n"); msg += QString("* cannot read data-file.\n"); msg += QString("* many more things can go wrong.\n"); msg += QString("Please check!"); - QMessageBox::critical(nullptr, tr("Fatal Error"), msg, tr("Quit")); + QMessageBox::critical(nullptr, tr("FATAL ERROR"), msg, QMessageBox::Close); } } diff --git a/src/musredit_qt5/musredit/PTextEdit.h b/src/musredit_qt5/musredit/PTextEdit.h index b864dfda..680ff04b 100644 --- a/src/musredit_qt5/musredit/PTextEdit.h +++ b/src/musredit_qt5/musredit/PTextEdit.h @@ -140,7 +140,6 @@ private slots: void musrFit(); void musrMsr2Data(); void musrView(); - void musrViewFinished(int, QProcess::ExitStatus); void musrT0(); void musrFT(); void musrPrefs(); diff --git a/src/musredit_qt6/musredit/PTextEdit.cpp b/src/musredit_qt6/musredit/PTextEdit.cpp index 3b7540fc..cdd212c8 100644 --- a/src/musredit_qt6/musredit/PTextEdit.cpp +++ b/src/musredit_qt6/musredit/PTextEdit.cpp @@ -2555,9 +2555,7 @@ void PTextEdit::musrView() if (fAdmin->getMusrviewShowOneToOneFlag()) arg << "-1"; - QProcess *proc = new QProcess(this); - connect(proc, SIGNAL(finished(int, QProcess::ExitStatus)), this, SLOT(musrViewFinished(int, QProcess::ExitStatus))); - + QProcess proc; // make sure that the system environment variables are properly set QProcessEnvironment env = QProcessEnvironment::systemEnvironment(); #if defined(Q_OS_DARWIN) @@ -2565,31 +2563,15 @@ void PTextEdit::musrView() #else env.insert("LD_LIBRARY_PATH", env.value("ROOTSYS") + "/lib:" + env.value("LD_LIBRARY_PATH")); #endif - proc->setProcessEnvironment(env); - proc->setWorkingDirectory(workDir); - proc->start(cmd, arg); - if (!proc->waitForStarted()) { - // error handling - QString msg(tr("Could not execute the output command: ")+cmd[0]); - QMessageBox::critical( nullptr, tr("FATAL ERROR"), msg, QMessageBox::Close ); - return; - } -} - -//---------------------------------------------------------------------------------------------------- -/** - *

Checks if musrview terminated with error, and if yes pop up a message box. - * @param exitCode - */ -void PTextEdit::musrViewFinished(int exitCode, QProcess::ExitStatus) -{ - if (exitCode != 0) { - QString msg = QString("musrview failed. Possible reasons:\n"); - msg += QString("* corrupted msr-file.\n"); - msg += QString("* cannot read data-file.\n"); - msg += QString("* many more things can go wrong.\n"); - msg += QString("Please check!"); - QMessageBox::critical(nullptr, tr("FATAL ERROR"), msg, QMessageBox::Close); + proc.setProgram(cmd); + proc.setProcessEnvironment(env); + if (!proc.startDetached(cmd, arg, workDir)) { + QString msg = QString("musrview failed. Possible reasons:\n"); + msg += QString("* corrupted msr-file.\n"); + msg += QString("* cannot read data-file.\n"); + msg += QString("* many more things can go wrong.\n"); + msg += QString("Please check!"); + QMessageBox::critical(nullptr, tr("FATAL ERROR"), msg, QMessageBox::Close); } } diff --git a/src/musredit_qt6/musredit/PTextEdit.h b/src/musredit_qt6/musredit/PTextEdit.h index 4352e097..6a060146 100644 --- a/src/musredit_qt6/musredit/PTextEdit.h +++ b/src/musredit_qt6/musredit/PTextEdit.h @@ -140,7 +140,6 @@ private slots: void musrFit(); void musrMsr2Data(); void musrView(); - void musrViewFinished(int, QProcess::ExitStatus); void musrT0(); void musrFT(); void musrPrefs();