Qt,ProcessState 枚举如何工作

Posted

技术标签:

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

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

QProcess::NotRunning- 0 - 进程未运行。 QProcess::Starting- -1- 进程正在启动,但程序尚未被调用。 QProcess::Running -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

当然,对于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;
    


...

【讨论】:

以上是关于Qt,ProcessState 枚举如何工作的主要内容,如果未能解决你的问题,请参考以下文章

Qt pro 文件调用另一个makefile

Wt 与 Qt,.pro 设置

QT 基础 pro 文件的认识

如何将网络模块添加到 QT pro 文件中?

Qt 如何枚举屏幕?

由makefile 如何生成QT 的pro 文件