由于项目需要,需要在界面中实现动态切换中英文。由此记录下实现方法。
如图所示:在右上角中有一个按钮切换选择中英文。
实现效果:
实现方法:
将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};");
以上就可以实现将按钮装换为菜单按钮。
具体操作如下:
TRANSLATIONS += resources/tr_zh.ts <br /> resources/tr_en.ts
选择:工具->外部->Qt语言家->更新翻译,则会生成对应的ts文件。
使用Qt Linguist打开要翻译的ts文件,对翻译源进行相应语言的翻译。
具体可参考:Qt Linguist介绍
使用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(“”)就可以了。
手机扫一扫
移动阅读更方便
你可能感兴趣的文章