2015-07-10 44 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