• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
张纯睿
博客园    首页    新随笔    联系   管理    订阅  订阅

qt QFileDialog 保存文件 没有扩展名

way1. 根据 selectedNameFilter 接受类型选择

 您希望在选择不同文件类型时自动添加扩展名,您可以在用户选择文件后检查文件的扩展名并自动添加相应的扩展名。以下是一个示例,演示如何在用户选择文件后自动添加扩展名:

 

QFileDialog dialog(this);
dialog.setFileMode(QFileDialog::AnyFile);
dialog.setNameFilter("文本文件 (*.txt);;位图文件 (*.bmp);;所有文件 (*)");

if (dialog.exec()) {
    QStringList selectedFiles = dialog.selectedFiles();
    QString selectedFilePath = selectedFiles.first();

    // 获取用户选择的文件过滤器
    QString selectedFilter = dialog.selectedNameFilter();

    // 根据选择的过滤器设置默认扩展名
    if (selectedFilter == "文本文件 (*.txt)") {
        if (!selectedFilePath.endsWith(".txt", Qt::CaseInsensitive)) {
            selectedFilePath += ".txt";
        }
    } else if (selectedFilter == "位图文件 (*.bmp)") {
        if (!selectedFilePath.endsWith(".bmp", Qt::CaseInsensitive)) {
            selectedFilePath += ".bmp";
        }
    }

    // 在这里使用selectedFilePath来保存文件
}

  

 way2. fileDialog.setDefaultSuffix(".bmp");

 way3.在用户选择文件过程中改变文件扩展名

用户选择文件过程中实时改变文件扩展名需要创建一个自定义的文件对话框,并在用户选择文件过程中监视所选文件类型以动态设置扩展名。这可以通过使用QFileDialog的子类化来实现。

#include <QFileDialog>
#include <QFileInfo>

class CustomFileDialog : public QFileDialog
{
    Q_OBJECT

public:
    CustomFileDialog(QWidget* parent = nullptr)
        : QFileDialog(parent)
    {
        //setOption(QFileDialog::DontUseNativeDialog, true); // 使用Qt的文件对话框而不是操作系统的原生对话框
        setNameFilter("文本文件 (*.txt);;位图文件 (*.bmp);;所有文件 (*)");
        setAcceptMode(QFileDialog::AcceptSave); // 设置对话框为保存模式
    }

    QString selectedFilePath() const
    {
        QString selectedFile = selectedFiles().isEmpty() ? QString() : selectedFiles().first();

        if (!selectedFile.isEmpty())
        {
            // 获取用户选择的文件过滤器
            QString selectedFilter = selectedNameFilter();

            // 根据选择的过滤器设置默认扩展名
            if (selectedFilter == "文本文件 (*.txt)") {
                if (!selectedFile.endsWith(".txt", Qt::CaseInsensitive)) {
                    selectedFile += ".txt";
                }
            } else if (selectedFilter == "位图文件 (*.bmp)") {
                if (!selectedFile.endsWith(".bmp", Qt::CaseInsensitive)) {
                    selectedFile += ".bmp";
                }
            }
        }

        return selectedFile;
    }
};

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    CustomFileDialog dialog;
    if (dialog.exec())
    {
        QString selectedFilePath = dialog.selectedFilePath();
        if (!selectedFilePath.isEmpty())
        {
            // 在这里使用selectedFilePath来保存文件
        }
    }

    return app.exec();
}

  

 

posted @ 2023-09-13 11:37  张纯睿  阅读(468)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3