我不明白如何使用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
当然,当涉及到 a 时QProcess
,您确实需要处理进程在更改状态时发出的信号。你不想做任何形式的忙等待,我不鼓励使用任何名为waitFor...
. 这些函数会导致重新进入事件循环,并可能重新输入您从未意识到可以重新输入的代码。这是一个你不想打开的潘多拉魔盒。关于 -style 函数的唯一有效用途是在从函数返回之前wait
等待QThread
已经完成的 s 。quit()
main()
您可以拥有要运行的进程的状态。然后,您可以将您的插槽连接到状态更改的信号,甚至在需要时在 QML 中,并采取相应的行动。此外,并不是没有“枚举函数”这样的东西。这只是一个简单的枚举,基本上状态“属性”持有。您可以按通常的方式查询和设置它。您可以在下面查看这些方法的文档。
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;
}
}
...