当前位置: 首页 > article >正文

Qt开发:QFileDialog的使用

文章目录

    • 一、QFileDialog的介绍
    • 二、QFileDialog的常用静态方法
    • 三、完整示例

一、QFileDialog的介绍

QFileDialog 是 Qt 框架中提供的一个用于文件选择的标准对话框类,它允许用户在应用程序中选择文件或目录。它是跨平台的,在不同操作系统上会自动适配本地风格的文件对话框。

QFileDialog 提供以下主要功能:

  • 打开单个文件
  • 打开多个文件
  • 选择目录
  • 保存文件
  • 文件过滤
  • 设置默认目录和文件名

二、QFileDialog的常用静态方法

1. 获取打开的文件名

QString fileName = QFileDialog::getOpenFileName(nullptr, 
			"选择文件", 
			QDir::homePath(), 
			"图片文件 (*.png *.jpg);;所有文件 (*.*)");

if (!fileName.isEmpty()) {
    qDebug() << "选中的文件:" << fileName;
}

参数说明:

  • nullptr 代表父窗口,如果是 this,则表示当前窗口为父窗口。
  • “选择文件” 是对话框的标题。
  • QDir::homePath() 设置默认路径(这里是用户的主目录)。
  • “图片文件 (.png .jpg);;所有文件 (.)” 是过滤器,用于限制可选文件类型。

2. 获取打开的多个文件名

QStringList fileNames = QFileDialog::getOpenFileNames(nullptr, 
				"选择多个文件", 
				QDir::homePath(), 
				"文本文件 (*.txt);;所有文件 (*.*)");

for (const QString &file : fileNames) {
    qDebug() << "选中的文件:" << file;
}

返回的是 QStringList,可以遍历获取多个文件路径。

3. 获取保存的文件名

QString fileName = QFileDialog::getSaveFileName(nullptr, "保存文件", QDir::homePath() + "/untitled.txt", "文本文件 (*.txt);;所有文件 (*.*)");

if (!fileName.isEmpty()) {
    QFile file(fileName);
    if (file.open(QIODevice::WriteOnly)) {
        QTextStream out(&file);
        out << "Hello, QFileDialog!";
        file.close();
    }
}

如果用户选择了文件,则 getSaveFileName() 返回完整路径,程序可以基于此保存内容。

4.选择目录

QString dir = QFileDialog::getExistingDirectory(nullptr, "选择文件夹", QDir::homePath());

if (!dir.isEmpty()) {
    qDebug() << "选中的文件夹:" << dir;
}

这个方法专门用于选择目录,而不是具体的文件。

三、完整示例

MainWindow::MainWindow(QWidget *parent)
    : QWidget(parent)
{
    setWindowTitle("QFileDialog类(文件对话框测试)");

    // 创建控件
    m_pFileNameLabel = new QLabel("文件名称:", this);
    m_pFileNameLineEdit = new QLineEdit(this);
    m_pFileButton = new QPushButton("选择...");

    m_pFileSizeLabel = new QLabel("文件大小:", this);
    m_pFileSizeLineEdit = new QLineEdit(this);

    m_pGetFileButton = new QPushButton("获取文件大小信息", this);

    // 排列布局
    QGridLayout *gLayout = new QGridLayout(this);
    gLayout->addWidget(m_pFileNameLabel, 0, 0);
    gLayout->addWidget(m_pFileNameLineEdit, 0 ,1);
    gLayout->addWidget(m_pFileButton, 0, 2);
    gLayout->addWidget(m_pFileSizeLabel, 1, 0);
    gLayout->addWidget(m_pFileSizeLineEdit, 1, 1, 1, 2);
    gLayout->addWidget(m_pGetFileButton, 2, 0, 1, 3);

    this->setLayout(gLayout);

    connect(m_pFileButton, &QPushButton::clicked, this, &MainWindow::GetFileInfoFunc);
    connect(m_pGetFileButton, &QPushButton::clicked, this, &MainWindow::GetFileSizeFunc);
}

void MainWindow::GetFileInfoFunc()
{
    QString fileName = QFileDialog::getOpenFileName(nullptr,
                "选择文件",
                QDir::homePath(),
                "图片文件 (*.png *.jpg);;所有文件 (*.*)");
    m_pFileNameLineEdit->setText(fileName);
}

void MainWindow::GetFileSizeFunc()
{
    QString strFileName = m_pFileNameLineEdit->text();
    QFileInfo fileInfo(strFileName);
    qint64 fileSize = fileInfo.size();
    m_pFileSizeLineEdit->setText(QString::number(fileSize));
}

在这里插入图片描述


http://www.kler.cn/a/613900.html

相关文章:

  • Flutter环境配置
  • Rust从入门到精通之入门篇:9.错误处理基础
  • 【MYSQL】Windows 下 CMD 操作数据库指南
  • Python使用SVC算法解决乳腺癌数据集分类问题——寻找最佳核函数
  • linux ACL权限控制之组权限控制程序设计
  • AI-Sphere-Butler之Ubuntu服务器如何部署Nginx代理,并将HTTP升级成HTTPS,用于移动设备访问
  • Jenkins在Rocky Linux 8上的安装与部署全流程指南
  • 【Unity网络编程知识】使用Socket实现简单UDP通讯
  • VSCode中使用Markdown以及Mermaid实现流程图和甘特图等效果
  • Unity中实现UI的质感和圆角
  • parallelStream线程问题及解决方案
  • 从入门到精通:HTML 项目实战中的学习进度(二)
  • AI: 文生视频的主流产品
  • Github Webhook 以及主动式
  • 免费OpenAI gpt-4o-mini-tts API调用(已开源)
  • 分布式锁,rediss,redisson,看门狗,可重入,可重试
  • 【实战ES】实战 Elasticsearch:快速上手与深度实践-2.2.1 Bulk API的正确使用与错误处理
  • Open GL ES ->模型矩阵、视图矩阵、投影矩阵等变换矩阵数学推导以及方法接口说明
  • 信息学奥赛一本通 1514:【例 2】最大半连通子图 | 洛谷 P2272 [ZJOI2007] 最大半连通子图
  • Emacs 折腾日记(二十)——修改emacs的一些默认行为