一、使用背景
如果,当你使用QMessageBox、QFileDialog等系统提供的方法时,可能打开的界面中有个控件提示信息未汉化。
其实,qt是提供的qm翻译文件的,所以我们可以使用它来进行翻译了。
首先说明这里针对的是linux系统。
二、qt系统的翻译文件位置
在/usr/share/qt4/translations 目录下 ,或者/usr/share/qt5/translations,有的都有
众多翻译文件,比如 qt_zh_CN.qm 就是中文翻译,qt_zh_TW.qm就是台湾翻译,qt_ko.qm就是韩语等,大致规则就是国家缩写,网上一搜就知道了。
三、使用qt系统的翻译文件
使用的话,可以拷贝到自己项目资源里,也可以直接使用绝对路径
关键代码就是:
QTranslator* qtTranslator = new QTranslator;
qtTranslator->load("/usr/share/qt4/translations/qt_zh_CN.qm");/*系统绝对路径*/
qtTranslator->load(":/qt_zh_CN.qm");/*资源文件*/
qApp->installTranslator(qtTranslator);
四、使用例子展示
五、代码
.h文件
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QTranslator>
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = 0);
~Widget();
private slots:
void on_pushButton_clicked();
void on_pushButton_2_clicked();
void on_comboBox_currentIndexChanged(const QString &arg1);
private:
Ui::Widget *ui;
QTranslator *m_translator = NULL;
};
#endif // WIDGET_H
.cpp文件
#include "widget.h"
#include "ui_widget.h"
#include <QMessageBox>
#include <QFileDialog>
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
ui->comboBox->addItem("CN");
ui->comboBox->addItem("ja");
ui->comboBox->addItem("ko");
ui->comboBox->addItem("uk");
on_comboBox_currentIndexChanged("CN");
ui->label->setText("当前语言:CN");
}
Widget::~Widget()
{
delete ui;
delete m_translator;
}
void Widget::on_pushButton_clicked()
{
QMessageBox box(QMessageBox::Question,"title","this is test");
box.setStandardButtons(QMessageBox::Ok | QMessageBox::Cancel);
box.exec();
}
void Widget::on_comboBox_currentIndexChanged(const QString &arg1)
{
if(m_translator == NULL)
m_translator = new QTranslator;
ui->label->setText(QString("当前语言:%1").arg(arg1));
if(arg1 == "CN"){
m_translator->load("/usr/share/qt4/translations/qt_zh_CN.qm");
}else if(arg1 == "ja") {
m_translator->load("/usr/share/qt4/translations/qt_ja.qm");
}else if(arg1 == "ko") {
m_translator->load("/usr/share/qt4/translations/qt_ko.qm");
}else if(arg1 == "uk") {
m_translator->load("/usr/share/qt4/translations/qt_uk.qm");
}
qApp->installTranslator(m_translator);
}
void Widget::on_pushButton_2_clicked()
{
QFileDialog::getExistingDirectory(this,"文件选择","/");
}