【问题标题】:How can I monitor QProcess finished() in qt4 (Signal/Slot)如何在 qt4(信号/插槽)中监控 QProcess finished()
【发布时间】:2010-11-17 14:10:38
【问题描述】:

看起来他们是 qt3 中的解决方案,但我找不到 qt4 的解决方案(所有我用过的,我看到了 qt3 的解决方案)。

connect(r, SIGNAL(readyReadStandardError()), this, SLOT(updateError()));
connect(r, SIGNAL(readyReadStandardOutput()), this, SLOT(updateText()));
connect(r, SIGNAL(finished(int exitcode)), this, SLOT(updateExit()));

我的 stdout/stderr SIGNAL/SLOT 工作正常,但我似乎找不到一个好的解决方案。我无法在循环或 proc->waitforfinished 中执行任何操作,因为我需要不断更新我的 UI。我该怎么做?

我的错误:Object::connect: No such signal QProcess::finished(int exitcode)

谢谢

以下是 QProcess 的信号......

Signals
void    error ( QProcess::ProcessError error )
void    finished ( int exitCode, QProcess::ExitStatus exitStatus )
void    readyReadStandardError ()
void    readyReadStandardOutput ()
void    started ()
void    stateChanged ( QProcess::ProcessState newState )

【问题讨论】:

  • 您的环境是否为 QT4 正确设置? finished 绝对是 QProcess 的“信号”成员。

标签: c++ qt4 signals-slots


【解决方案1】:

替换你的代码行

connect(r, SIGNAL(finished(int exitcode)), this, SLOT(updateExit()));

connect(r, SIGNAL(finished(int)), this, SLOT(updateExit()));

当连接信号和槽没有给出参数名称时。

【讨论】:

    【解决方案2】:

    我觉得我在这里遗漏了一些东西,但我有几分钟的时间...... :)

    4.x 中完成的信号有什么问题?据我所知,它只是为您所拥有的内容添加了一些参数。

    4.5:

    void QProcess::finished(int exitCode, QProcess::ExitStatus exitStatus)

    4.0:

    void QProcess::finished(int exitCode)

    更改您的插槽以使用正确的参数,如果您不需要它们,请忽略它们。

    至于需要状态更新,在单独的线程中启动新的 QProcess 并让该线程进行等待。

    【讨论】:

    • 对我的代码进行了一些编辑...尝试了我认为正确的方法并得到了错误...尝试了几种方法,但没有成功
    • @John:你尝试了什么?以下应该工作:connect(r, SIGNAL(finished(int,QProcess::ExitStatus)), this, SLOT(updateExit(int,QProcess::ExitStatus)));void updateExit(int exitCode, QProcess::ExitStatus exitStatus);
    • @John Studio - 如果您想快速解决问题,请发布代码。我们越容易编译代码,您就越有可能得到答案。