首页 > 其他分享 >qt QFileDialog 保存文件 没有扩展名

qt QFileDialog 保存文件 没有扩展名

时间:2023-09-13 11:44:54浏览次数:37  
标签:文件 扩展名 qt QFileDialog dialog selectedFilePath txt

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.在用户选择文件过程中改变文件扩展名

用户选择文件过程中实时改变文件扩展名需要创建一个自定义的文件对话框,并在用户选择文件过程中监视所选文件类型以动态设置扩展名。这可以通过使用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();
}

  

 

标签:文件,扩展名,qt,QFileDialog,dialog,selectedFilePath,txt
From: https://www.cnblogs.com/carl2380/p/17699180.html

相关文章

  • RocketMQ-(9-1)-MQTT-EventBridge概述
    RocketMQMQTT概览传统的消息队列MQ主要应用于服务(端)之间的消息通信,比如电商领域的交易消息、支付消息、物流消息等等。然而在消息这个大类下,还有一个非常重要且常见的消息领域,即IoT类终端设备消息。近些年,我们看到随着智能家居、工业互联而兴起的面向IoT设备类的消息正在呈爆炸式......
  • win10安装pyqt5
     安装pipinstallPyQt5-ihttps://pypi.douban.com/simplepipinstallPyQt5-tools-ihttps://pypi.douban.com/simple测试designer验证importsysfromPyQt5.QtWidgetsimportQWidget,QApplicationapp=QApplication(sys.argv)widget=QWidget()widget.resize(......
  • C++系列三:Qt-for-Python
    目录代码参考:代码参考:官方文档、博客参考代码参考:self.ui.pushButton.setText("demo")lable=QLabel("<fontcolor=redsize=40>HelloWorld!</font>")lable.show()SignalsandSlots:fromPySide6.QtCoreimportSlot@Slot()defsay_hello():......
  • C++系列三:QT-事件处理
    目录介绍:介绍:GUI应用程序是由事件(event)驱动的,点击鼠标,按下按键,窗口大小改变等等按事件的来源,可以将事件划分为3类:自生事件(spontaneousevent):由窗口系统产生,如:QKeyEvent、QMouseEvent。自生事件会进入系统队列,等待事件循环的处理。发布事件(postedevent):是由Qt应用程序产生,如:Q......
  • Qt 中使用mplayer播放音乐不能是中文歌名
    错误代码:Qt中Filenotfound:'./music/��ͤ��.mp3'如果在Qt中无法正确识别包含中文字符的文件名,可能是因为默认的文件编码不支持中文字符解决方案:本人前两种方案均不可解决问题,方案三解决问题。方案1:使用Unicode路径:将文件路径从字符串字面值转换为Unicode字符。例如,使用QSt......
  • QTableView部分基本使用、与数据库搭建
    创建一个QSqlTableModel来管理数据库表格的数据,可以在后续步骤中使用这个模型来与表格内容进行交互。QSqlTableModel*model=newQSqlTableModel;model->setTable("your_table_name");//设置表格名称model->select();//从数据库中选择数据设置QTableView模型:将QSqlTableMo......
  • 纯C++代码理解Qt中的信号和槽函数
    槽函数的调用是一个多步骤的过程:1.连接(Connect)首先,通过使用QObject::connect()函数来建立信号和槽之间的连接。QObject::connect(sender,SIGNAL(signalName(args)),receiver,SLOT(slotName(args)));这里的sender和receiver是QObject派生的对象,而signalName和slotName则分......
  • 教你2种方法,将iOS设备通过MQTT协议连接到华为云物联网平台
    本文分享自华为云社区《如何将iOS设备通过MQTT协议连接到华为云物联网平台:Flutter和Swift两种方法》,作者:张俭。前言当今时代,物联网技术正逐步改变我们的生活和工作方式。华为云IoTDA服务,为开发者提供了一个开放、稳定、可靠的基础设施,以便实现设备与云端的无缝连接和双向通......
  • RK3568开发笔记(八):开发板烧写buildroot固件(支持hdmi屏),搭建Qt交叉编译开发环境,编译一个D
    前言  前面发现开发板用ubuntu固件发现空间不够,本篇使用buildroot固件,来实现目标板运行qt界面应用。<br>烧写buildroot固件  这部分更详细的参照《RK3568开发笔记(六):开发板烧写ubuntu固件(支持mipi屏)》的步骤,本质上烧写都是一样的,只是不同的update.img。步骤一:下载镜像  ......
  • RK3568开发笔记(八):开发板烧写buildroot固件(支持hdmi屏),搭建Qt交叉编译开发环境,编译一个D
    前言  前面发现开发板用ubuntu固件发现空间不够,本篇使用buildroot固件,来实现目标板运行qt界面应用。 烧写buildroot固件  这部分更详细的参照《RK3568开发笔记(六):开发板烧写ubuntu固件(支持mipi屏)》的步骤,本质上烧写都是一样的,只是不同的update.img。步骤一:下载......