我需要在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
中)具有正确的值。为什么会发生这种情况,我该如何解决?
1条答案
按热度按时间ldioqlga1#
根据@Igor Tandetnik的说法,连接堆积起来,目的地的值也堆积起来。在再次运行
Installer::extract
之前断开解压的所有连接解决了这个问题。