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;
}
}