4 文件选择对话框 QFileDialog

4 文件选择对话框 QFileDialog

4.1 QFileDialog 开发流程

方法一:分步骤打开

实例化 QFileDialog

创建 QFileDialog 实例:

cpp 复制代码
QFileDialog dialog;

设置对话框模式

通过 setFileMode() 指定模式(如打开单个文件、多个文件或保存文件):

cpp 复制代码
dialog.setFileMode(QFileDialog::AnyFile);

设置文件类型过滤器

使用 setNameFilter() 限制可选择的文件类型:

cpp 复制代码
dialog.setNameFilter(tr("Images (*.png *.xpm *.jpg);;Text files (*.txt);;XML files (*.xml)"));

显示对话框并获取结果

调用 exec() 显示对话框,通过 selectedFiles() 获取用户选择的路径列表:

cpp 复制代码
if (dialog.exec()) {
    QStringList files = dialog.selectedFiles();
    // 处理选中的文件
}

方法二:静态方法简化操作

直接使用静态方法快速创建对话框(如 getOpenFileName()):

cpp 复制代码
void Widget::on_btnQfiledialog_clicked()
{
    QString fileName = QFileDialog::getOpenFileName(this, tr("Open File"),
                                                    "D:/AAA",
                                                    tr("Text(*.txt)"));
    qDebug() << fileName;

    QFile file;
    file.setFileName(fileName);
    if(!file.open(QIODevice::ReadOnly | QIODevice::Text)){
        qDebug() << "file open error";
    }
    QTextStream in(&file);
    in.setCodec("UTF-8");
    // QString context = in.read(file.size());
    while(!in.atEnd()){
        QString context = in.readLine();
        qDebug() << context;
    }
    file.close();
}

代码块可直接插入项目中使用,静态方法需根据实际需求调整参数。

4.2 QFileDialog 打开开发案例

cpp 复制代码
#include <QApplication>
#include <QFileDialog>
#include <QStringList>
#include <QString>
#include <QMessageBox>

int main(int argc, char *argv[]) {
  QApplication app(argc, argv);
  QFileDialog dialog;
  dialog.setFileMode(QFileDialog::ExistingFiles);
  dialog.setNameFilter("Text files (*.txt);;Images (*.png *.jpg);;All files (*)");
// 显示对话框
  if (dialog.exec()) {
  // 获取用户选中的文件列表
    QStringList fileNames = dialog.selectedFiles();  
    // 遍历列表并处理每个文件
    for (const QString &fileName : fileNames) {
      QMessageBox::information(nullptr, "File Selected", fileName);
    }
  }
  return app.exec();
}

功能特点

  • 支持多文件选择
  • 提供文件类型过滤器
  • 显示选中文件的路径
  • 基于Qt框架实现跨平台功能

4.3 QFileDialog 保存开发案例

cpp 复制代码
void Widget::on_btnSave_clicked()
{
    QString fileName = QFileDialog::getSaveFileName(this, tr("Save File"),
                "D:/QT/untitled.txt",
                tr("Text (*.txt *.doc)"));
    qDebug()<<fileName;
    QFile file;
    file.setFileName(fileName);
    if(!file.open(QIODevice::WriteOnly | QIODevice::Text)){
        qDebug() << "file open error";
    }
    QTextStream out(&file);
    out.setCodec("UTF-8");
    out << "Qdialog Write Data to the Txt File";
    file.close();
}

功能特点

  • 通过文件对话框获取保存路径
  • 以UTF-8编码写入文本内容
  • 包含基本的错误处理
相关推荐
jason成都4 分钟前
ignav-next|Java 层封装 GNSS/INS 组合导航框架,隔离 RTKLIB 与 INS 内核,双模块独立演进、最小侵入
java·开发语言
抓不住时间的沙4 分钟前
butterfly主题美化,打造属于自己的个性博客
java·开发语言·前端·javascript·node.js·github
MarkHD18 分钟前
Stable Diffusion入门第19-20天:保存与分享你的工作流——第一阶段收官,从“能用”到“可复用”
java·开发语言·stable diffusion
云水初26 分钟前
【agent篇】RAG 知识库构建避坑指南
开发语言·python·学习·agent·rag
小小龙学IT27 分钟前
oneTBB 开源并行编程库深度解析:从工作窃取调度器到 flow graph 实战
c++·开源
2019一路前行28 分钟前
Python 函数、循环语句
开发语言·python
CarIise1 小时前
C语言基础课程笔记:硬件原理、数据类型、结构体与格式化输入输出详解
c语言·开发语言·笔记
leoZ2311 小时前
Vue3 还原一个企业级后台-14-项目总结
开发语言·人工智能·后端·opencv·计算机视觉·数据挖掘·rust
ShineWinsu1 小时前
对于C++:缓冲区管理的详细解析
linux·c++·面试·编程·笔试·io·缓冲区
h_a_o777oah2 小时前
【算法基础】卡特兰数:递推定义与折线对称公式推导及解题策略
c++·算法·acm·组合数学·卡特兰数·反射原理·动态规划dp