c++ 变量未在lambda槽中更新

nom7f22z  于 2023-01-28  发布在  其他
关注(0)|答案(1)|浏览(115)

我需要在QProcess::finished信号上运行一个带参数(Installer::install)的函数,我决定使用lambda作为slot,结果如下:

private:
    QProcess* unzip = new QProcess(this);`
void Installer::extract(QString source, QString destination) {
    QStringList args;
    args.append("x");
    args.append(source);
    args.append(QString("-o%1").arg(destination));
    connect(unzip, &QProcess::finished, this, [=](int code, QProcess::ExitStatus status) {
        if (code != 0 || status == QProcess::CrashExit) {
            qDebug() << "Installer - Error >> Exit code:" << code;
            qDebug() << "Installer - Error >> Status:" << status;
            emit error();
        }
        else
            install(destination + "/game.exe");
        });
    unzip->start("path\to\extractor\program.exe", args);
    if (!unzip->waitForStarted()) {
        qDebug() << "Installer - Error >> Extractor not started";
        qDebug() << "Installer - Error Detail >>" << unzip->error();
        emit error();
        return;
    }
    qDebug() << "Sot Installer - Updates - Extractor >> Extracting...";
}

Installer::extract函数在每次提取结束时被调用。假设我们有四个归档文件要提取,Installer::extract将被调用四次,使用四个不同的destination
对于第一个归档文件,一切正常。从第二个归档文件开始,lambda槽中的destination变量具有第一个destination的值,而它应该具有第二个destination的值。相反,槽外的destination变量(例如,在最后一个args.append中)具有正确的值。为什么会发生这种情况,我该如何解决?

ldioqlga

ldioqlga1#

根据@Igor Tandetnik的说法,连接堆积起来,目的地的值也堆积起来。在再次运行Installer::extract之前断开解压的所有连接解决了这个问题。

相关问题