目录
可获得文件的全名,包含全部的后缀。
====================
已验证的样例
void MainWindow::on_pushButton_clicked()
{
QString file_full, file_name, file_path, file_suffix, complete_suffix, file_baseName, file_completeBaseName ;
QFileInfo fileinfo; // <<------
file_full =QFileDialog::getOpenFileName(this, "Open File", "QCoreApplication::applicationFilePath()",
"AllFile (*.*);;");
//-----------------------------
fileinfo =QFileInfo(file_full);//file_full:包含路径的文件全名
file_path = fileinfo.absolutePath(); //绝对路径
file_name = fileinfo.fileName();//文件全名,包含全部后缀
file_suffix = fileinfo.suffix(); //只含最后一个后缀
complete_suffix = fileinfo.completeSuffix(); //连续多个的全部后缀
file_baseName = fileinfo.baseName();
file_completeBaseName = fileinfo.completeBaseName();
//-----------------------------
qDebug()<<"file_path : "<<file_path;
qDebug()<<"file_name : "<<file_name;
qDebug()<<"file_suffix : "<<file_suffix;
qDebug()<<"complete_suffix : "<<complete_suffix;
qDebug()<<"file_baseName : "<<file_baseName;
qDebug()<<"file_completeBaseName : "<<file_completeBaseName;
}
输出:
file_path : "C:/Users/abcdef/Documents/zzzxxx"
file_name : "zz.abc.cde.fgh"
file_suffix : " fgh" // fileinfo.suffix() : 只能获得最后一个后缀
complete_suffix : " abc.cde.fgh" // fileinfo.completeSuffix() : 可获得全部的后缀。
file_baseName : "zz"
file_completeBaseName : "zz.abc.cde"
完整的文件名的够成:
file_completeBaseName+ file_suffix
或
file_baseName + complete_suffix
可获得文件的全名,包含全部的后缀。
如:qDebug()的输出结果:
file_name : "zz.abc.cde.fgh"
参考: https://blog.csdn.net/zq9955/article/details/122401773
======================
QCoreApplication::application DirPath(); //获取项目的根路径
QCoreApplication::application FilePath(); //获取文件的根路径
qDebug()<<"QCoreApplication::applicationDirPath() : "<<QCoreApplication::applicationDirPath();
qDebug()<<"QCoreApplication::applicationFilePath(); : "<<QCoreApplication::applicationFilePath(); 输出结果:
QCoreApplication::applicationDirPath() : "C:/Users/abcdef/Documents/build-untitled6-Desktop_Qt_5_14_2_MinGW_64_bit-Debug/debug" // 注意: win和 linux的Qt默认显示有差异;但并不影响真实路径构造的结果?
QCoreApplication::applicationFilePath(); : "C:/Users/abcdef/Documents/build-untitled6-Desktop_Qt_5_14_2_MinGW_64_bit-Debug/debug/untitled6.exe"
======================
QString file_full, file_name, file_path,file_suffix ;
QFileInfo fileinfo;
file_full = QFileDialog::getOpenFileName(this,.....);
fileinfo =QFileInfo(file_full);//文件名
file_name = fileinfo.fileName();//文件后缀
file_suffix = fileinfo.suffix()//绝对路径
file_path = fileinfo.absolutePath();https://www.jianshu.com/p/f7b2ae13bcca
QString runPath = QCoreApplication::applicationDirPath();//获取项目的根路径
QString file_name = QFileDialog::getOpenFileName(this,QStringLiteral("选择文件"),runPath,"Text Files(*.txt)",nullptr,QFileDialog::DontResolveSymlinks); static QString getOpenFileName(QWidget *parent = nullptr,
const QString &caption = QString(),
const QString &dir = QString(),
const QString &filter = QString(),
QString *selectedFilter = nullptr,
Options options = Options());第一个参数parent,用于指定父组件,可以看到QT默认这个参数是可以为空的,如果不想提供父控件,你可以直接写nullptr,但是我建议你写一个父控件,例如this即可。这样选择文件的弹框就可以在父控件中间显示。就像这样,弹框的中心和父控件中心是相同的
第二个参数caption,是对话框的标题,例如上图中的“选择文件”就是这么来的
第三个参数dir,是对话框显示时默认打开的目录,"“不写任何参数,那么会默认打开工程的目录,我一般会写”"或者提供项目的根目录; “.”:打开当前目录?
第四个参数filter,是对话框的后缀名过滤器,如果不写,那么任何文件都会显示,如果写了会根据过滤器显示;
如果选择的文件是同一个类型,只是后缀不同,用空格隔开就好,例如都是图片,“Files(.jpg .png)”,代表只能选择后缀为jpg或者png的图片
如果选择的文件是不同类型,那么需要多个过滤器,过滤器之间用两个分号分隔,例如 "Image Files(.jpg);;Text Files(.png)";
第五个参数selectedFilter,是默认选择的过滤器,写nullptr就行,因为QT默认也是空,啥也没过滤;
第六个参数options,是对话框的一些参数设定,比如只显示文件夹等等,它的取值是enum QFileDialog::Option,每个选项可以使用 | 运算组合起来。
关于option参数,QT提供了很多种:
https://www.freesion.com/article/64581504018/
本博参考:https://blog.csdn.net/ken2232/article/details/129745712