Qt下载模板到本地文件内容丢失问题

上源码

关键点已标注在源码中 A, B...

c++ 复制代码
// 保存的文件路径后缀
    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();
                }
            }
        });
    }
相关推荐
крон2 小时前
【Auto.js例程】华为备忘录导出到其他手机
开发语言·javascript·智能手机
zh_xuan3 小时前
c++ 单例模式
开发语言·c++·单例模式
老胖闲聊3 小时前
Python Copilot【代码辅助工具】 简介
开发语言·python·copilot
Blossom.1183 小时前
使用Python和Scikit-Learn实现机器学习模型调优
开发语言·人工智能·python·深度学习·目标检测·机器学习·scikit-learn
曹勖之4 小时前
基于ROS2,撰写python脚本,根据给定的舵-桨动力学模型实现动力学更新
开发语言·python·机器人·ros2
豆沙沙包?4 小时前
2025年- H77-Lc185--45.跳跃游戏II(贪心)--Java版
java·开发语言·游戏
军训猫猫头5 小时前
96.如何使用C#实现串口发送? C#例子
开发语言·c#
liuyang-neu5 小时前
java内存模型JMM
java·开发语言
我很好我还能学6 小时前
【面试篇 9】c++生成可执行文件的四个步骤、悬挂指针、define和const区别、c++定义和声明、将引用作为返回值的好处、类的四个缺省函数
开发语言·c++
蓝婷儿7 小时前
6个月Python学习计划 Day 16 - 面向对象编程(OOP)基础
开发语言·python·学习