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();
}
但我得到奇怪的错误:
错误:没有匹配函数来调用'Updater :: connect(QProcess*[未解析的重载函数类型],Updater :: start()::)'});
我在这做错了什么?代码在从QObject派生的类的方法内执行.该项目配置为使用c ++ 11.
我在Linux x32上使用Qt 5.3.1和gcc 4.9.2
问题是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),所以现在没有任何歧义
| 归档时间: | 
 | 
| 查看次数: | 1000 次 | 
| 最近记录: |