2

我不明白如何使用ProcessState枚举。根据文档,ProcessState枚举可以具有以下值:

  • QProcess::NotRunning- 0 - 进程未运行。
  • QProcess::Starting- -1- 进程正在启动,但程序尚未被调用。
  • QProcess::Running -2 - 进程正在运行并准备好进行读写。

我将如何使用它们?

4

2 回答 2

1

您所指的不是函数,而是值。您可以将它们分配给整数并输出其值:

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()

于 2013-09-13T02:52:13.027 回答
0

您可以拥有要运行的进程的状态。然后,您可以将您的插槽连接到状态更改的信号,甚至在需要时在 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 示例,但是您可以这样做:

我的班级.h

class MyClass : QObject
{
    Q_OBJECT
public:
    explicit MyClass(QObject *parent);

public Q_SLOTS:
    void handleProcessStateChanged(QProcess::ProcessState newProcessState);

....
}

我的类.cpp

...

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;
    }
}

...
于 2013-09-13T02:52:38.387 回答