将lambda函数连接到QProcess :: error时出错

时间:2015-07-10 03:14:29

标签: qt c++11 lambda qprocess

在下面的代码中,我想将lambda函数连接到QProcess :: error signal:

void Updater::start() {
    QProcess process;
    QObject::connect(&process, &QProcess::error, [=] (QProcess::ProcessError error) {
        qWarning() << "error " << error;
    });
    process.start("MyProgram");
    process.waitForFinished();
}

但我得到了一个奇怪的错误:

  

错误:没有用于调用'Updater :: connect(QProcess *)的匹配函数   [未解决的重载函数类型],   Updater :: start()::)'});

我在这里做错了什么?代码在从QObject派生的类的方法内执行。该项目配置为使用c ++ 11。

我在Linux x32上使用Qt 5.3.1和gcc 4.9.2

1 个答案:

答案 0 :(得分:5)

问题是QProcess有另一个error()方法,因此编译器不知道使用哪种方法。如果要处理重载方法,则应使用next:

QProcess process;
connect(&process, static_cast<void (QProcess::*)(QProcess::ProcessError)>
(&QProcess::error), [=](QProcess::ProcessError pError) {
    qWarning() << "error " << pError;
});
process.start("MyProgram");
process.waitForFinished();

是的,它看起来很难看,但没有其他办法(只有旧的语法?)。

这个特殊的行告诉编译器你想使用void QProcess::error(QProcess::ProcessError error),所以现在没有任何歧义

More information you can find here