Qt 语言家实现中英文切换(解决纯代码添加部件的中英文转换问题)
关于.ts和.qm文件的生成,更新翻译、发布翻译等步骤就不多说了,其他博主有大量的描述。
现在我要解决的是中英文未完全转换的问题如下图:
如上图所示,显示中文页面,没有问题,再看下图:
此时我已经转换成英文了,可以看到中英文转换按钮下面的选项还是中文,并未转换过来,究其原因就是这个按钮我是用纯代码编写的,并未使用UI设计拖拽,而在实际项目中,并非所有的部件都可以拖拽!
而纯代码编写的部件名称,即使加上了tr();也没有用,经过参考 一去、二三里 的一个资源,经过多次测试,找到了上面问题的原因:少添加了一个保护继承的函数
void mywidget::changeEvent(QEvent *event)
{
switch (event->type())
{
case QEvent::LanguageChange:
translateUI();
break;
default:
QWidget::changeEvent(event);
}
}
而中间的translateUI()函数就是给所需要中英文转换的部件添加名字,
void MainWidget::translateUI()
{
this->setWindowTitle(tr("main widget"));
welcome_label->setText(tr("welcome to Qt") + QString("26197884/26188347"));
setting_button->setText(tr("setting"));
ok_button->setText(tr("ok"));
cancel_button->setText(tr("cancel"));
}
这样还不能解决上面的问题,还需要一步:在main.cpp中添加引用.qm文件的代码,并把指针传给指定类中:
QApplication app(argc, argv);
QTranslator translator;
translator.load(QString(":/qm/main_widget_") + "en");
app.installTranslator(&translator);
MainWidget main_widget;
//将translator传到main_widget中
main_widget.setTranslator(&translator);
main_widget.show();
经过上述三个步骤应该解决了这个问题
文笔不周之处,多多包涵,如有错误,多谢指正!
参考链接:
TranslateLanguage