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

Error while connecting lambda function to QProcess::error

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

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

但是我得到了奇怪的错误:

error: no matching function for call to 'Updater::connect(QProcess* [unresolved overloaded function type], Updater::start()::)' });

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

我在 Linux x32 和 gcc 4.9.2

上使用 Qt 5.3.1

问题是 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.

对于使用 Qt 5.6 或更高版本的用户,不推荐使用 QProcess::error 信号。您可以使用 QProcess::errorOccurred 信号来避免命名歧义和复杂的转换。

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