QT QFileDialog获取目录情况下的汉化翻译问题

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值