【问题标题】:Qt,how does ProcessState enum worksQt,ProcessState 枚举如何工作
【发布时间】:2013-09-13 01:56:33
【问题描述】:

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

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

我将如何使用它们?

【问题讨论】:

  • 您似乎没有为您的问题选择答案。还缺少什么?我们还能为您做什么?

标签: qt qt4 qprocess


【解决方案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

当然,对于QProcess,您确实需要处理进程在更改状态时发出的信号。你不想做任何形式的忙等待,我不鼓励使用任何称为waitFor... 的Qt 函数。这些函数会导致重新进入事件循环,并可能重新输入您从未意识到可能会重新输入的代码。这是一个你不想打开的潘多拉魔盒。关于 wait 样式函数的唯一有效用途是,在您从 main() 函数返回之前,等待已经是 quit()QThreads 完成。

【讨论】:

    【解决方案2】:

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

    myclass.h

    class MyClass : QObject
    {
        Q_OBJECT
    public:
        explicit MyClass(QObject *parent);
    
    public Q_SLOTS:
        void handleProcessStateChanged(QProcess::ProcessState newProcessState);
    
    ....
    }
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-28
      相关资源
      最近更新 更多