Qt, как работает перечисление ProcessState

Я не понимаю, как использовать перечисления ProcessState. Согласно документации, перечисление ProcessState может иметь следующие значения:

  • QProcess::NotRunning- 0 - Процесс не запущен.
  • QProcess::Starting- -1-Процесс запускается, но программа еще не запущена.
  • QProcess::Running -2 -Процесс запущен и готов к чтению и записи.

Как бы я их использовал?


person suraj kiran    schedule 13.09.2013    source источник
comment
Вы, кажется, не выбрали ответ на свой вопрос. Чего еще не хватает? Что еще мы можем сделать для вас?   -  person lpapp    schedule 28.09.2013


Ответы (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.... Эти функции вызывают повторный вход в цикл обработки событий и, возможно, повторный ввод вашего кода, который, как вы никогда не осознавали, может быть введен повторно. Это ящик Пандоры, который не хочется открывать. Единственным допустимым использованием функций в стиле wait является ожидание завершения QThread, которые были quit(), прежде чем вернуться из функции main().

person Kuba hasn't forgotten Monica    schedule 13.09.2013

Вы можете иметь состояния для запускаемых процессов. Затем вы можете подключить свой слот к сигналу изменения состояния, даже в 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;
    }
}

...
person lpapp    schedule 13.09.2013