QT中,我们想要让用户选择一个文件路径,通常会这样:
QString savepath = QFileDialog::getExistingDirectory(this,"Select Path","D:/new/");
qDebug()<<"savepath"<<savepath;
直接调用getExistingDirectory方法,不需要new一个对象,只是指定标题和初始的目录,这样用户选择之后就可以返回一串字符串了
但是你会发现,这里的标题是我们指定的,但像“文件夹”、“选择文件夹”、“取消”这些文本,却没办法指定。特别是针对一些需要翻译变换的场景,只是这么简单去使用QFileDialog的话肯定不行。
于是我修改成这样
//可修改文本和并进行翻译的文件输入框
QString select_path;
QFileDialog getDirDialog(this,QObject::tr("Select Path"),"D:/dev/"); //构建时给出标题
getDirDialog.setFileMode(QFileDialog::Directory); //设置成目录模式
getDirDialog.setLabelText(QFileDialog::FileName, QObject::tr("File Name:"));//路径提示文本
getDirDialog.setLabelText(QFileDialog::Reject, QObject::tr("Cancel")); //取消按钮文本
getDirDialog.setLabelText(QFileDialog::Accept, QObject::tr("Open")); //确定按钮文本
QStringList dir_list;
if (getDirDialog.exec()){dir_list = getDirDialog.selectedFiles();}
if(dir_list.count() > 0){select_path = dir_list[0];}
setFileMode是给他设置一个模式,这里选用的是目录,你也可以选择文件。选择了目录之后,就不会显示出具体的文件和过滤条件。需要注意的是,setFileMode虽然会重置这些文本,但只要setLabelText过,就不会再有问题。
setLabelText是设置文件框内的一些可修改的文本,官方有五种类型:
FileName指的是上图的“文件夹:”,Accept和Reject分别是确定和取消,其他两个暂时没有用到过。
这里用了QObject::tr(“Open”)而不是QString(“Open”),这是因为想要用qt的语言家翻译,必须用QObject::tr来标志过后,才可以进行翻译。
这样的话,我们只需要用qt的翻译功能,在我们需要的时候加载一遍就行了,无需用什么if/else这种繁琐复杂的流程。
有关语言家翻译,详细的请百度吧。
最后就是exec()执行,获取之后再调用selectedFiles就能获取到选择的QStringList列表。
对于获取目录这种情况,一般只有一个返回项。如果点击取消,就是list就是空的。
最后就是这种效果
感谢:
https://blog.csdn.net/kenfan1647/article/details/122910283