QFileDialog取消按钮始终显示英文的问题
1.问题描述
设置了语言为中文,但是打开之后,可是QFileDialog打开之后还是取消按钮始终是cancel,不会变,打开按钮初始状态也是open,点击选中某个文件夹时,才会时打开;
MultiFileDirDialog::MultiFileDirDialog(QWidget *parent) : QFileDialog(parent) { setOption(QFileDialog::DontUseNativeDialog, true); //支持多选 QListView *listView = findChild<QListView*>("listView"); if (listView) listView->setSelectionMode(QAbstractItemView::ExtendedSelection); QTreeView *treeView = findChild<QTreeView*>(); if (treeView) treeView->setSelectionMode(QAbstractItemView::ExtendedSelection);
//获取打开确认按钮 QDialogButtonBox *button = findChild<QDialogButtonBox *>("buttonBox"); if (button) { button->clear(); QPushButton* accpetbutton = new QPushButton(button); accpetbutton->setText("确定"); button->addButton((QAbstractButton*)accpetbutton, QDialogButtonBox::AcceptRole); QPushButton* cancel = new QPushButton(button); cancel->setText("取消"); button->addButton((QAbstractButton*)cancel, QDialogButtonBox::RejectRole); /*button->button(QDialogButtonBox::Ok)->setText(tr("确定")); button->button(QDialogButtonBox::Cancel)->setText(tr("取消"));*/ disconnect(button, SIGNAL(accepted()), this, SLOT(accept()));//使链接失效 connect(button, SIGNAL(accepted()), this, SLOT(go()));//改成自己的槽 } //无效 //setLabelText(QFileDialog::FileName, "选择文件:");//英文化文件名称 //setLabelText(QFileDialog::Reject, "取消");//英文化取消按钮 //setLabelText(QFileDialog::Accept, "选择");//英文化打开按钮 }
尝试方法
(1)安装语言 无效
static QTranslator qtTranslator;;
bool loaded = qtTranslator.load(QDir::currentPath() + "/translations/qt_zh_CN.qm");
//bool loaded=qtTranslator->load(":/language/Resources/language/qt_zh_CN.qm");
loaded= a.installTranslator(&qtTranslator);
(2)编辑qt_zh_CN.ts文件 无效
发现QFileDialog的中用QDialogButtonBox按钮中已经包含取消的翻译,只是没有起作用;
(3)setLabelText用函数去设置 无效
//setLabelText(QFileDialog::FileName, "选择文件:");//英文化文件名称
//setLabelText(QFileDialog::Reject, "取消");//英文化取消按钮
//setLabelText(QFileDialog::Accept, "选择");//英文化打开按钮
(4)获取按钮之后设置 无效
button->button(QDialogButtonBox::Ok)->setText(tr("确定"));
button->button(QDialogButtonBox::Cancel)->setText(tr("取消"));
解决办法
查看了QFileDialog的源码才知道要怎么搞,QFiledialog的界面如下所示,再去研究下QDialogButtonBox ,你会恍然大悟;
如下所示,获取按钮之后,直接new QPushButton,设置进去,就可以了;
QDialogButtonBox *button = findChild<QDialogButtonBox *>("buttonBox"); if (button) { button->clear(); QPushButton* accpetbutton = new QPushButton(button); accpetbutton->setText("确定"); button->addButton((QAbstractButton*)accpetbutton, QDialogButtonBox::AcceptRole); QPushButton* cancel = new QPushButton(button); cancel->setText("取消"); button->addButton((QAbstractButton*)cancel, QDialogButtonBox::RejectRole); disconnect(button, SIGNAL(accepted()), this, SLOT(accept()));//使链接失效 connect(button, SIGNAL(accepted()), this, SLOT(go()));//改成自己的槽 }
效果如下图所示:
但是里面显示的内容还是英文,我的计算机显示的My computer;
经过搜索发现是因为main函数中把 installTranslator放在创建窗口对象mywindow w;之后了,需要放在前面,如下所示;先installTranslator,再创建对象mywindow w;就可以了;
int main(int argc, char *argv[]) { CSingleApplication a(argc, argv);static QTranslator qtTranslator;; bool loaded = qtTranslator.load(":/language/Resources/language/qt_zh_CN.qm"); loaded = a.installTranslator(&qtTranslator); qApp->installTranslator(&qtTranslator); mywindow w; if (argc>1) { w.ui.widgetToolBar->hide(); w.hide(); } else { w.show(); } //w.SLotInit(); int reval= a.exec(); return reval; }
效果如下所示
但是即使时先installTranslator,再创建对象mywindow w;取消按钮的英文还是无法改变,只能通过重新添加按钮的方式去改变;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix