VS2017+QT实现英文切换
一、添加TS文件
右键项目->添加->新建项
注:在生成ts文件前,可将代码中需要动态翻译的中文用tr("中文")包含。
生产后缀ts文件
二、编辑TS文件
-
Qt VS Tools->Launch Qt Linguist打开QT语言家。
-
打开上面生成的中英文ts文件。
-
选中文本信息,分布输入对应中英文,并点击“❓”变为“✔”。
-
翻译完所有文本信息,直到左侧上下文不在出现黄色问号。
注意:中英文翻译格式不一致,左侧“✔”会为黄色!
三、发布QM文件
点击文件->发布全部,在软件目录会对应生成两个qm文件
注:如果工程文件显示文本信息有改动,需要更新ts文件(右键ts文件->lupdate),并重新生成qm文件。
四、使用QM文件
-
int main(int argc, char *argv[])
-
{
-
QApplication a(argc, argv);
-
-
//读取语言配置
-
std::shared_ptr<QSettings> iniFile = std::make_shared<QSettings>("config.ini", QSettings::IniFormat);
-
QString language_value = "0";
-
QString language_suffix = QString("zh");
-
LANGUAGE language = UI_ZH;
-
bool key = iniFile->contains("Language/english");
-
if (key)
-
{
-
language = (LANGUAGE)iniFile->value("Language/english").toInt();
-
if (language == UI_EN)
-
{
-
language_suffix = QString("en");
-
}
-
}
-
-
QTranslator translator;
-
ret = translator.load(QString(":/Resources/Translatio_") language_suffix);
-
if (!ret) {
-
std::cout << "语音配置读取错误!" << std::endl;
-
}
-
a.installTranslator(&translator);
-
-
MainForm w;
-
w.setTranslator(&translator);
-
w.setLanguage(language);
-
w.show();
-
-
return a.exec();
-
}
MainForm.h
-
typedef enum {
-
UI_ZH,
-
UI_EN
-
}LANGUAGE;
-
-
Q_DECLARE_METATYPE(LANGUAGE)
-
-
public:
-
void setLanguage(LANGUAGE currentLanguage);
-
-
void setTranslator(QTranslator* translator);
-
-
private:
-
void changeEvent(QEvent *event);
-
-
void switchLanguage(LANGUAGE language);
-
-
private:
-
LANGUAGE _currentLanguage;
-
QTranslator *_translator = nullptr;
-
-
private slots:
-
void Btn_ChineseClick();
-
void Btn_EnglishClick();
MainForm.cpp
-
void MainForm::setLanguage(LANGUAGE currentLanguage)
-
{
-
_currentLanguage = currentLanguage;
-
}
-
-
void MainForm::setTranslator(QTranslator * translator)
-
{
-
_translator = translator;
-
}
-
-
void MainForm::changeEvent(QEvent * event)
-
{
-
switch (event->type())
-
{
-
case QEvent::LanguageChange:
-
ui.retranslateUi(this);
-
break;
-
default:
-
QWidget::changeEvent(event);
-
}
-
}
-
-
void MainForm::switchLanguage(LANGUAGE language)
-
{
-
QString language_qm;
-
switch (language)
-
{
-
case UI_ZH:
-
language = UI_ZH;
-
language_qm = QString(":/Resources/Translation_zh");
-
break;
-
-
case UI_EN:
-
language = UI_EN;
-
language_qm = QString(":/Resources/Translation_en");
-
break;
-
-
default:
-
language = UI_ZH;
-
language_qm = QString(":/Resources/Translation_zh");
-
}
-
-
if (_currentLanguage != language)
-
{
-
_currentLanguage = language;
-
bool ret = _translator->load(language_qm);
-
if (!ret) {
-
PLOG_ERROR << "语音配置读取错误!";
-
}
-
else {
-
QVariant var = QString::number(language, 10);
-
std::shared_ptr<QSettings> iniFile = std::make_shared<QSettings>("config.ini", QSettings::IniFormat);
-
iniFile->beginGroup("Language");
-
iniFile->setValue("english", var);
-
iniFile->endGroup();
-
}
-
}
-
}
-
-
void MainForm::Btn_ChineseClick()
-
{
-
switchLanguage(LANGUAGE::UI_ZH);
-
}
-
-
void MainForm::Btn_EnglishClick()
-
{
-
switchLanguage(LANGUAGE::UI_ZH);
-
}
注:在需要动态切换中英文界面都需要实现重写void changeEvent(QEvent *event)事件并调用 retranslateUi(this)刷新界面;
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhgbkkej
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01