目录
仅列出测试代码,需要使用linguist进行手动转换;
langSwitch,pro
TRANSLATIONS = lang_en.ts\
lang_zh.ts\
lang_la.ts
widget.cpp
#include "widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
{
createScreen();//创建界面
}
Widget::~Widget()
{
}
void Widget::createScreen(){
//布局设计
combo = new QComboBox;
combo->addItem("English","en");
combo->addItem("Chinese","zh");
combo->addItem("Latin","la");//拉丁文
label = new QLabel;
refreshLabel();
QVBoxLayout *layout = new QVBoxLayout;
layout->addWidget(combo,1);
layout->addWidget(label,5);
setLayout(layout);
connect(combo,SIGNAL(currentIndexChanged(int)),this,SLOT(changeLang(int)));
}
void Widget::changeLang(int index){
QString langCode = combo->itemData(index).toString();//读取下来菜单栏所对应的值
changeTr(langCode);//翻译语言
refreshLabel();//刷新文字
}
//翻译改变语言
void Widget::changeTr(const QString &langCode){
static QTranslator *translator;
if(translator !=NULL){
qApp->removeTranslator(translator);
delete translator;
translator = NULL;
}
translator = new QTranslator;
QString qmFilename = "lang_"+langCode;//设定.qm文件路径
if(translator->load(QString("D:/Qt_exe/LangSwitch/")+qmFilename)){
qApp->installTranslator(translator);
}
}
//刷新文字
void Widget::refreshLabel(){
label->setText(tr("TXT_HELLO_WORLD","Hello World"));
}
widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QComboBox>
#include <QLabel>
#include <QTranslator>
#include <QApplication>
#include <QVBoxLayout>
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
private slots:
void changeLang(int index);//响应下拉菜单中语言栏的改变
private:
void createScreen();//创建界面
void changeTr(const QString &langCode);//翻译改变语言
void refreshLabel();
QComboBox *combo;
QLabel *label;
};
#endif // WIDGET_H
手动转换方法有点烦,其他博客上有很多自动转换的方法。。。有空再玩