Qt,ProcessState 枚举如何工作
Posted
技术标签:
【中文标题】Qt,ProcessState 枚举如何工作【英文标题】:Qt,how does ProcessState enum works 【发布时间】:2013-09-13 01:56:33 【问题描述】:我不明白如何使用ProcessState
枚举。根据文档,ProcessState
枚举可以具有以下值:
我将如何使用它们?
【问题讨论】:
您似乎没有为您的问题选择答案。还缺少什么?我们还能为您做什么? 【参考方案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()
的 QThread
s 完成。
【讨论】:
【参考方案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 枚举如何工作的主要内容,如果未能解决你的问题,请参考以下文章