2015-07-10 23 views
3

在下面的代码我想拉姆达功能连接到另外,QProcess ::错误信号:错误而lambda函数连接到另外,QProcess ::错误

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的类的内部方法。该项目配置为使用C++ 11。

我在Linux X32使用Qt 5.3.1用gcc 4.9.2

+0

可能重复[在Qt 5中连接过载信号和插槽](http://stackoverflow.com/questions/16794695/connecting-overloaded-signedals-and-slots-in-qt-5) –

回答

4

问题是QProcess有另一个error()方法,所以编译器只是不知道哪种方法使用。如果你要处理的重载方法,下一步应使用:

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

+0

谢谢,@Chernobyl ,那帮助了我! – folibis

+0

另请参阅http://stackoverflow.com/a/16795664/846250一小段代码,使过载声明“自动” –

+0

发现'static_cast'的要求是一个棘手的问题,谢谢。 – TranslucentCloud