在下面的代码中,我想将 lambda 函数连接到 QProcess::error 信号:
void Updater::start() {
QProcess process;
QObject::connect(&process, &QProcess::error, [=] (QProcess::ProcessError error) {
qWarning() << "error " << error;
});
process.start("MyProgram");
process.waitForFinished();
}
但我收到奇怪的错误:
错误:没有匹配的函数可用于调用“Updater::connect(QProcess*
[未解决的重载函数类型],
更新程序::开始()::)' });
我在这里做错了什么?该代码在从 QObject 派生的类的内部方法中执行。该项目配置为使用 c++11。
我在 Linux x32 上使用 Qt 5.3.1 和 gcc 4.9.2
问题是QProcess
还有另一个error() http://doc.qt.io/qt-5/qprocess.html#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)
,所以现在没有任何歧义
您可以在这里找到更多信息 https://wiki.qt.io/New_Signal_Slot_Syntax.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)