将 lambda 函数连接到 QProcess::error 时出错
Error while connecting lambda function to QProcess::error
在下面的代码中,我想将 lambda 函数连接到 QProcess::error 信号:
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 的 class 方法内部执行。配置为使用 c++11 的项目。
我在 Linux x32 和 gcc 4.9.2
上使用 Qt 5.3.1
问题是 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)
,所以现在没有任何歧义
对于使用 Qt 5.6 或更高版本的用户,不推荐使用 QProcess::error
信号。您可以使用 QProcess::errorOccurred
信号来避免命名歧义和复杂的转换。
QProcess process;
connect(&process, &QProcess::errorOccurred, [=](QProcess::ProcessError error) {
qWarning() << error;
});
process.start("MyProgram");
process.waitForFinished();
在下面的代码中,我想将 lambda 函数连接到 QProcess::error 信号:
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 的 class 方法内部执行。配置为使用 c++11 的项目。
我在 Linux x32 和 gcc 4.9.2
上使用 Qt 5.3.1问题是 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)
,所以现在没有任何歧义
对于使用 Qt 5.6 或更高版本的用户,不推荐使用 QProcess::error
信号。您可以使用 QProcess::errorOccurred
信号来避免命名歧义和复杂的转换。
QProcess process;
connect(&process, &QProcess::errorOccurred, [=](QProcess::ProcessError error) {
qWarning() << error;
});
process.start("MyProgram");
process.waitForFinished();