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

fol*_*bis 4 lambda qt qprocess c++11

在下面的代码中,我想将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();
}
Run Code Online (Sandbox Code Playgroud)

但我得到奇怪的错误:

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

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

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

Che*_*byl 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();
Run Code Online (Sandbox Code Playgroud)

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

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

您可以在此处找到更多信息.