首页 > 编程学习 > 《Qt5:文件对话框简单使用示例》

《Qt5:文件对话框简单使用示例》

发布时间:2022/5/14 15:49:23

QFileDialog创建文件对话框


可以使用QFileDialog类创建一个文件对话框,用于选择文件夹和普通文件,可以选择单个文件也可以选择多个文件,可以限制文件的格式也可以不限制,这里的选择其实就是获取文件夹和普通文件的路径,后续再利用获取的路径打开相应的文件,如下图所示。

以下是QFileDialog类常用的公有静态成员函数,通过这些公有静态成员函数可以快速的创建各种文件对话框。

getExistingDirectory:获取已存在文件夹路径

QString dir = QFileDialog::getExistingDirectory(this, tr("Open Directory"),
                                                "/home",
                                                QFileDialog::ShowDirsOnly
                                                | QFileDialog::DontResolveSymlinks);

getExistingDirectoryUrl:和getExistingDirectory差不多,区别在于可以获取远程文件的路径

getOpenFileName:获取已存在单个限定格式文件的路径,通过筛选器限定文件格式。

QString fileName = QFileDialog::getOpenFileName(this, tr("Open File"),
                                                "/home",
                                                tr("Images (*.png *.xpm *.jpg)"));

 如果要选择多种格式, 可以使用两个分号';;'分开

"Images (*.png *.xpm *.jpg);;Text files (*.txt);;XML files (*.xml)"

getOpenFileNames:获取已存在多个限定格式文件的路径,通过筛选器限定文件格式

QStringList files = QFileDialog::getOpenFileNames(
                        this,
                        "Select one or more files to open",
                        "/home",
                        "Images (*.png *.xpm *.jpg)");

getOpenFileUrl:和getOpenFileName差不多,区别在于可以获取远程文件的路径

getOpenFileUrls:和getOpenFileNames差不多,区别在于可以获取远程文件的路径

getSaveFileName:获取用户选择的文件名,该文件不必存在

QString fileName = QFileDialog::getSaveFileName(this, tr("Save File"),
                           "/home/jana/untitled.png",
                           tr("Images (*.png *.xpm *.jpg)"));

getSaveFileUrl:和getSaveFileName差不多,区别在于可以获取远程文件的路径

 

QFileInfo获取文件信息


1、判断是否是普通文件、目录、符号链接、隐藏文件、文件路径是绝对的还是相对的、读写。

2、获取文件名称、文件路径、目录路径、文件时间、上次修改文件的日期和本地时间、上次读取(访问)文件的日期和本地时间、文件的路径不包括文件名、文件大小、符号链接指向的文件或目录的绝对路径、文件创建/生成的日期和时间。

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QFileDialog>
#include <QDebug>
#include <QFileInfo>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    OpenFile();
    selectFile();
}

MainWindow::~MainWindow()
{
    delete ui;
}
/*
void MainWindow::OpenFile()
{
    //获取已存在单个限定格式文件的路径
    QString fileName = QFileDialog::getOpenFileName(this,tr("Open Image"), "", tr("Image Files (*.png *.jpg *.bmp)"));
    //文件绝对路径"F:/图片/c5387854a94f7fa4cce004ede8e7123a.jpg"
    qDebug()<<"文件名:"<<fileName;
}
*/

void MainWindow::OpenFile()
{
    //获取已存在文件夹路径
    QString dir = QFileDialog::getExistingDirectory(this, tr("Open Directory"),"",QFileDialog::ShowDirsOnly| QFileDialog::DontResolveSymlinks);
    //文件绝对路径"F:/图片/c5387854a94f7fa4cce004ede8e7123a.jpg"
    qDebug()<<"文件名:"<<dir;
    //获取已存在多个限定格式文件的路径
    QStringList files = QFileDialog::getOpenFileNames(this,"Select one or more files to open","F:/","Images (*.png *.xpm *.jpg)");
    foreach(QString str,files)
    {
        qDebug()<<str;
    }
    QString savefileName = QFileDialog::getSaveFileName(this, tr("Save File"),"/home/jana/untitled.png",tr("Images (*.png *.xpm *.jpg)"));
}

//选择文件
void MainWindow::selectFiles()
{
    //定义文件对话框类
    QFileDialog *fileDialog = new QFileDialog(this);
    //定义文件对话框标题
    fileDialog->setWindowTitle(tr("打开图片"));
    //设置默认文件路径
    fileDialog->setDirectory(".");
    //设置文件过滤器
    fileDialog->setNameFilter(tr("Images(*.png *.jpg *.jpeg *.bmp)"));
    //设置可以选择多个文件,默认为只能选择一个文件QFileDialog::ExistingFiles
    fileDialog->setFileMode(QFileDialog::ExistingFile);
    //设置视图模式
    fileDialog->setViewMode(QFileDialog::Detail);
    //打印所有选择的文件的路径
    QString fileName;
    if(fileDialog->exec())
    {
       fileDialog->selectFile(fileName);
       qDebug()<<fileName;
    }
    QFileInfo fileInfo(fileName);
    if(fileInfo.exists())
    {
        qDebug()<<tr("文件存在");
    }
    else
    {
        qDebug()<<tr("文件不存在");
    }
    
    qDebug()<<fileInfo.absoluteDir();
    qDebug()<<fileInfo.absoluteFilePath();
    qDebug()<<fileInfo.absolutePath();
    qDebug()<<fileInfo.baseName();
    qDebug()<<fileInfo.birthTime();
    qDebug()<<fileInfo.bundleName();
    qDebug()<<fileInfo.caching();
    qDebug()<<fileInfo.canonicalFilePath();
    qDebug()<<fileInfo.canonicalPath();
    qDebug()<<fileInfo.completeBaseName();
    qDebug()<<fileInfo.completeSuffix();
    qDebug()<<fileInfo.size();
    
    
    //判断是否目录
    if(fileInfo.isDir())
    {
        qDebug()<<fileInfo.dir();
    }
    else
    {
        qDebug()<<tr("NO DIR");  
    }
    
    if(fileInfo.isAbsolute())
    {
        qDebug()<<fileInfo.absoluteDir();
        qDebug()<<fileInfo.absoluteFilePath();
        qDebug()<<fileInfo.absolutePath();
    }
    else
    {
        qDebug()<<tr("NO Absolute");
    }
    if(fileInfo.isBundle())
    {
        
    }
    else
    {
        qDebug()<<tr("NO Absolute");
    }
    if(fileInfo.isExecutable())
    {
        
    }
    else
    {
        qDebug()<<tr("NO Absolute");
    }
    if(fileInfo.isFile())
    {
        
    }
    else
    {
        qDebug()<<tr("NO Absolute");
    }
    if(fileInfo.isHidden())
    {
        
    }
    else
    {
        qDebug()<<tr("NO Absolute");
    }
    if(fileInfo.isNativePath())
    {
        
    }
    else
    {
        qDebug()<<tr("NO Absolute");
    }
    if(fileInfo.isReadable())
    {
        
    }
    else
    {
        qDebug()<<tr("NO Absolute");
    }
    if(fileInfo.isRelative())
    {
        
    }
    else
    {
        qDebug()<<tr("NO Absolute");
    }
    if(fileInfo.isRoot())
    {
        
    }
    else
    {
        qDebug()<<tr("NO Absolute");
    }
    if(fileInfo.isSymLink())
    {
        
    }
    else
    {
        qDebug()<<tr("NO Absolute");
    }
    if(fileInfo.isWritable())
    {
        
    }
    else
    {
        qDebug()<<tr("NO Absolute");
    }
}

//选择多个文件
void MainWindow::selectFiles()
{
    //定义文件对话框类
    QFileDialog *fileDialog = new QFileDialog(this);
    //定义文件对话框标题
    fileDialog->setWindowTitle(tr("打开图片"));
    //设置默认文件路径
    fileDialog->setDirectory(".");
    //设置文件过滤器
    fileDialog->setNameFilter(tr("Images(*.png *.jpg *.jpeg *.bmp)"));
    //设置可以选择多个文件,默认为只能选择一个文件QFileDialog::ExistingFiles
    fileDialog->setFileMode(QFileDialog::ExistingFiles);
    //设置视图模式
    fileDialog->setViewMode(QFileDialog::Detail);
    //打印所有选择的文件的路径
    QStringList fileNames;
    if(fileDialog->exec())
    {
        fileNames = fileDialog->selectedFiles();
    }
    foreach(QString str,fileNames)
    {
        qDebug()<<str;
    }
}

 

Copyright © 2010-2022 ngui.cc 版权所有 |关于我们| 联系方式| 豫B2-20100000