QT 国际化 动态切换中英文

阅读: 评论:0

QT 国际化 动态切换中英文

QT 国际化 动态切换中英文

Qt 国际化 动态切换中英文

由于项目需要,需要在界面中实现动态切换中英文。由此记录下实现方法。

首先

如图所示:在右上角中有一个按钮切换选择中英文。

实现效果:

  • 点击菜单按钮后弹出两个子菜单列表。选择中英文。

实现方法:

  • 将PushButton按钮转换为菜单按钮,在某些样式中,按钮的文本右侧会生成一个小三角形。
m_menu  =  new  QMenu;
m_English  =  new  QAction(tr("English"),this);
m_China  =  new  QAction(tr("中文"),this);
m_menu->addAction(m_China);
m_menu->addAction(m_English);
m_pTitleBar->m_pBtnMenu->setMenu(m_menu);

设置菜单按钮的样式:

m_menu->setStyleSheet("QMenu{background-color:rgb(89,87,87);}QMenu::item{color:  rgb(225,225,225);border:  1px  solid  rgb(60,60,60);background-color:rgb(89,87,87);padding:5px  30px  5px  5px;}QMenu::item:selected{  background-color:rgb(235,110,36);}QMenu::item:pressed{border:  1px  solid  rgb(60,60,61);  background-color:  rgb(220,80,6);  }");
//三角形按钮不显示
m_pTitleBar->m_pBtnMenu->setStyleSheet("QPushButton::menu-indicator{image:none};");

以上就可以实现将按钮装换为菜单按钮。

其次,需要将所有转换的字体前面添加上QObject::tr();表示可翻译。

具体操作如下:

  • 对用户可见的文本信息全部使用tr()进行封装。

  • 在pro中添加:

TRANSLATIONS  +=  resources/tr_zh.ts  resources/tr_en.ts

选择:工具->外部->Qt语言家->更新翻译,则会生成对应的ts文件。

  • 翻译:

使用Qt Linguist打开要翻译的ts文件,对翻译源进行相应语言的翻译。

具体可参考:Qt Linguist介绍

  • ### 发布翻译,生成对应的xxx.qm文件
    使用Qt Liguust翻译完成以后,在Qt工具 –> 外部 –> Qt语言家 –> 发布翻译
    (中文,英文都要翻译。tr(” “)中的文本只是一个源 Sources ,程序加载翻译文件后,就是将源替换为翻译后的文本,因此中英文都需要翻译。)

  • 添加xxx.qm文件进资源文件。

  • 加载翻译文件:

    使用QTranslator来加载生成的qm文件,就可以让程序显示指定的语言。

    QTranslator translator;
    translator.load(":/qm/main_widget_zh"); 
    app.installTranslator(&translator);

    通过以上方法就可以实现静态的加载。也就是程序一开始运行的时候,加载相应的翻译文件。

动态加载的话,就需要用到上述的菜单按钮,点击后添加槽函数:

//连接槽函数
connect(m_menu,  SIGNAL(triggered(QAction*)),  this, SLOT(slot_MenuTriggered(QAction*)));
//槽函数实现动态切换语言,加载翻译文件
void  MyMainWindow::slot_MenuTriggered(QAction  *m_TriggeredAction)
{static  QTranslator*  translator;if  (translator  !=  NULL){qApp->removeTranslator(translator);//如果之前加载过翻译文件,则移除之前的翻译文件。delete  translator;translator  =  NULL;}translator  =  new  QTranslator;if(m_TriggeredAction->text()  ==QObject::tr("中文")){if(translator->load(":/qm/resources/tr_zh.qm")){qApp->installTranslator(translator);}}else  if(m_TriggeredAction->text() ==QObject::tr("English")){if(translator->load(":/qm/resources/tr_en.qm")){qApp->installTranslator(translator);}}ReTrenslate_Ui();//再次调用,重新加载可见文本。实现翻译
}
//重新加载可见文本
void  MyMainWindow::ReTrenslate_Ui()
{m_pConnectWidget->m_pBtnConnect->setText(tr("连接串口"));......
}

该ReTrenslate_Ui()函数在MyMainWindow构造函数中的时候需要第一次调用。然后在动态切换语言以后需要再一次调用。

注意:如果语言库qm文件里面的字段一个都没有翻译的话,调用QTranslator::load()加载的话会一直返回false,我项目中是中英文切换,所以一开始我是生成了两个qm文件,一个中文,一个英文的,中文语言库是直接更新然后发布,没有做任何翻译操作,所以导致加载中文语言库一直失败,至于原因查了半天也没有个所以然来,如果有了解的忘告知,如果需要恢复默认的直接load(“”)就可以了。

本文发布于:2024-02-01 21:12:15,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170679313639449.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:中英文   动态   QT
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23