在下面的代码中,我想将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
答案 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)
,所以现在没有任何歧义