将 lambda 函数连接到 QProcess::error 时出错

2024-01-10

在下面的代码中,我想将 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(使用前将#替换为@)

将 lambda 函数连接到 QProcess::error 时出错 的相关文章

随机推荐