ProcessState
列挙型の使用方法がわかりません。ドキュメントによると、ProcessState
列挙型には次の値を指定できます。
- QProcess::NotRunning- 0 - プロセスが実行されていません。
- QProcess::Starting- -1-プロセスは開始していますが、プログラムはまだ呼び出されていません。
- QProcess::Running -2 - プロセスは実行中であり、読み取りと書き込みの準備ができています。
それらをどのように使用しますか?
あなたが参照しているのは関数ではなく、単なる値です。それらを整数に割り当てて、その値を出力できます。
int val = QProcess::Starting;
qDebug() << "the value of QProcess::Starting is" << val;
プロセスの状態を確認するには、次のようにします。
QProcess *process;
....
if (process->state() == QProcess::Running) // do something with a running process
もちろん、 に関してはQProcess
、プロセスが状態を変更するときに発行するシグナルを実際に処理する必要があります。あなたはビジー待機をしたくないので、 と呼ばれる Qt 関数の使用を思いとどまらせるべきwaitFor...
です。これらの関数により、イベント ループが再入力され、再入力される可能性があることに気付かなかったコードが再入力される可能性があります。開けたくないパンドラの箱です。-style 関数の唯一の有効な使用方法は、関数から戻る前にs が終了するのwait
を待つことです。QThread
quit()
main()
実行するプロセスの状態を持つことができます。その後、必要に応じて QML でも状態変更シグナルにスロットを接続し、それに応じて動作させることができます。また、「enum関数」というものがないわけではありません。基本的に状態「プロパティ」が保持するのは単純な列挙です。通常の方法で照会および設定できます。以下のこれらのメソッドのドキュメントを参照できます。
http://qt-project.org/doc/qt-5.0/qtcore/qprocess.html#state
http://qt-project.org/doc/qt-5.0/qtcore/qprocess.html#setProcessState
これは、質問のように一般的な Qt の例のように見えますが、次のようになります。
class MyClass : QObject
{
Q_OBJECT
public:
explicit MyClass(QObject *parent);
public Q_SLOTS:
void handleProcessStateChanged(QProcess::ProcessState newProcessState);
....
}
...
MyClass::MyClass(QObject *parent)
: QObject(parent)
{
}
MyClass::myProcessInvokeMethod()
{
connect(myprocess, SIGNAL(stateChanged(QProcess::ProcessState), this, SLOT(handleStateChange(QProcess::ProcessState)));
myprocess.start(myprogram, myarguments);
....
}
void MyClass::handleProcessStateChange(QProcess::ProcessState newProcessState)
{
switch (newProcessState) {
case QProcess::NotRunning:
qDebug() << "Here goes the handler code when the process is not yet running";
break;
case QProcess::Starting:
qDebug() << "Here goes the handler code when the process is starting";
break;
case QProcess::Running:
qDebug() << "Here goes the handler code when the process is running";
break;
}
}
...