27 #include <QMessageBox> 29 #if QT_CONFIG(process) 30 QgsRunProcess::QgsRunProcess(
const QString &action,
bool capture )
39 mProcess =
new QProcess;
43 connect( mProcess, static_cast <
void ( QProcess::* )( QProcess::ProcessError ) >( &QProcess::error ),
this, &QgsRunProcess::processError );
44 connect( mProcess, &QProcess::readyReadStandardOutput,
this, &QgsRunProcess::stdoutAvailable );
45 connect( mProcess, &QProcess::readyReadStandardError,
this, &QgsRunProcess::stderrAvailable );
49 connect( mProcess, static_cast <
void ( QProcess::* )(
int, QProcess::ExitStatus ) >( &QProcess::finished ),
this, &QgsRunProcess::processExit );
54 mOutput->setTitle( action );
56 mOutput->showMessage(
false );
59 QObject *mOutputObj =
dynamic_cast<QObject *
>( mOutput );
62 connect( mOutputObj, &QObject::destroyed,
this, &QgsRunProcess::dialogGone );
66 mProcess->start( action );
70 if ( ! mProcess->startDetached( action ) )
72 QMessageBox::critical(
nullptr, tr(
"Action" ),
73 tr(
"Unable to run command\n%1" ).arg( action ),
74 QMessageBox::Ok, Qt::NoButton );
82 QgsRunProcess::~QgsRunProcess()
87 void QgsRunProcess::die()
93 void QgsRunProcess::stdoutAvailable()
95 QByteArray bytes( mProcess->readAllStandardOutput() );
96 QTextCodec *codec = QTextCodec::codecForLocale();
97 QString line( codec->toUnicode( bytes ) );
100 mOutput->appendMessage( line );
103 void QgsRunProcess::stderrAvailable()
105 QByteArray bytes( mProcess->readAllStandardOutput() );
106 QTextCodec *codec = QTextCodec::codecForLocale();
107 QString line( codec->toUnicode( bytes ) );
110 mOutput->appendMessage(
"<font color=red>" + line +
"</font>" );
113 void QgsRunProcess::processExit(
int, QProcess::ExitStatus )
124 mOutput->appendMessage(
"<b>" + tr(
"Done" ) +
"</b>" );
133 void QgsRunProcess::dialogGone()
144 disconnect( mProcess, static_cast <
void ( QProcess::* )( QProcess::ProcessError ) >( &QProcess::error ),
this, &QgsRunProcess::processError );
145 disconnect( mProcess, &QProcess::readyReadStandardOutput,
this, &QgsRunProcess::stdoutAvailable );
146 disconnect( mProcess, &QProcess::readyReadStandardError,
this, &QgsRunProcess::stderrAvailable );
147 disconnect( mProcess, static_cast <
void ( QProcess::* )(
int, QProcess::ExitStatus ) >( &QProcess::finished ),
this, &QgsRunProcess::processExit );
152 void QgsRunProcess::processError( QProcess::ProcessError err )
154 if ( err == QProcess::FailedToStart )
163 QgsDebugMsg(
"Got error: " + QString(
"%d" ).arg( err ) );
167 QgsRunProcess::QgsRunProcess(
const QString &action,
bool )
173 QgsRunProcess::~QgsRunProcess()
static QgsMessageOutput * createMessageOutput()
function that returns new class derived from QgsMessageOutput (don't forget to delete it then if show...
virtual void setMessage(const QString &message, MessageType msgType)=0
Sets message, it won't be displayed until.
Interface for showing messages from QGIS in GUI independent way.