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();
                }
            }
        });
    }
相关推荐
egoist202311 分钟前
【C++指南】一文总结C++二叉搜索树
开发语言·数据结构·c++·c++11·二叉搜索树
小王努力学编程32 分钟前
动态规划学习——背包问题
开发语言·c++·学习·算法·动态规划
满怀10153 小时前
Python扩展知识详解:lambda函数
开发语言·python
佚名涙3 小时前
go中锁的入门到进阶使用
开发语言·后端·golang
猫猫的小茶馆3 小时前
【PCB工艺】软件是如何控制硬件的发展过程
开发语言·stm32·单片机·嵌入式硬件·mcu·51单片机·pcb工艺
勘察加熊人4 小时前
wpf+c#路径迷宫鼠标绘制
开发语言·c#·wpf
小黄人软件5 小时前
C# ini文件全自动界面配置:打开界面时读ini配置到界面各控件,界面上的控件根据ini文件内容自动生成,点保存时把界面各控件的值写到ini里。
开发语言·c#
二进制人工智能6 小时前
【QT5 网络编程示例】TCP 通信
网络·c++·qt·tcp/ip
Android洋芋8 小时前
C语言深度解析:从零到系统级开发的完整指南
c语言·开发语言·stm32·条件语句·循环语句·结构体与联合体·指针基础
bjxiaxueliang8 小时前
一文详解QT环境搭建:Windows使用CLion配置QT开发环境
开发语言·windows·qt