上源码
关键点已标注在源码中 A, B…
// 保存的文件路径后缀QString dateTime = Myapp::getCurrentTimeDescYMDHms().replace(" ", "").replace("-", "").replace(":", "");// 临时文件名称QString newFileName = QString(QUuid::createUuid().toString().replace("{", "").replace("}", "").replace("-", ""));// 复制文件QFile::copy(tmplateFile, newFileName);// 获取下载的文件路径QString savePath = QFileDialog::getSaveFileName(this, "保存模板文件",saveFileName.replace(".xlsx", dateTime+".xlsx"),"Excel 文件 (*.xlsx)");if (!savePath.isEmpty()) {// 使用局部作用域确保xlsx对象及时析构QXlsx::Document xlsx(newFileName);if (xlsx.saveAs(savePath)) {qDebug() << "下载成功";} else {qDebug() << "保存失败";MyHelper::ShowMessageBoxError(tr("保存失败!"));}// 延迟删除确保操作系统释放锁. 此步骤最为关键QTimer::singleShot(100, [newFileName]() {QFile tmpFile(newFileName);if (tmpFile.exists()) {tmpFile.setPermissions(QFile::WriteOwner | QFile::ReadOwner);if (tmpFile.remove()) {qDebug() << "临时文件删除成功";} else {qDebug() << "最终删除失败:" << tmpFile.errorString();}}});}