#QT笔记#
项目需要刚转QT没多久,很多东西不太熟悉,需要自己摸索~~
QT4.7以下自带的小工具对中文支持没那么,特别是翻译工具,在linguist里面全是乱码问题,所以一般来说:
重要的事情说三遍!!!!!
先做英文版,整个代码里,不要写任何中文字符串常量
先做英文版,整个代码里,不要写任何中文字符串常量
先做英文版,整个代码里,不要写任何中文字符串常量
最后再制作其他语言,不然到时候一堆乱码够你郁闷的~~
qt多语言的好处是将语言文件与源码UI完全分开,如果有更改只需要lupdate一下就行了,之前翻译的不会有影响,这一点比较好
还有个深坑:pro文件不要指定任何编码,否则你就白翻译了~~
写下博客记录下学习笔记吧!
QT不同于MFC的变量关联和消息映射,QT里叫信号和连接槽,直接编译出来cpp数组类似查表
在这里拦截UI改变多语言的事件,主窗口需要重新绘制:
protected:
void changeEvent(QEvent* event);
在这个函数里面需要自己手动更新当前窗口(或主窗口)的文字,
主界面有三个按钮,以下为测试程序源码:
#include "mainwindow.h"
#include "ui_mainwindow.h"
QTranslator appTranslator;
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
connect(ui->pushButton_ch, SIGNAL(clicked()), this, SLOT(ClickButtonCh()));
connect(ui->pushButton_en, SIGNAL(clicked()), this, SLOT(ClickButtonEn()));
connect(ui->pushButton_msg, SIGNAL(clicked()), this, SLOT(ClickButtonMsg()));
ClickButtonEn();
return ;
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::ClickButtonMsg()
{
QMessageBox msg(QMessageBox::Warning,tr("Title"),tr(""),
0,this,Qt::Dialog | Qt::MSWindowsFixedSizeDialogHint);
msg.addButton(tr("OK"),QMessageBox::AcceptRole);
msg.setText(tr("Mul language test."));
msg.exec();
}
void MainWindow::ClickButtonCh()
{
appTranslator.load ("ch",".");
QApplication::instance()->installTranslator(&appTranslator);
}
void MainWindow::ClickButtonEn()
{
appTranslator.load ("en",".");
QApplication::instance()->installTranslator(&appTranslator);
}
void MainWindow::retranslate()
{
ui->pushButton_ch->setText(QString(tr("中文语言")));
ui->pushButton_en->setText(QString(tr("英文语言")));
ui->pushButton_msg->setText(QString(tr("消息框")));
}
void MainWindow::changeEvent(QEvent* event) {
if(event->type() == QEvent::LanguageChange) {
retranslate();
} else
QWidget::changeEvent(event);
}
制作多语言的时候,需要在pro工程文件末尾追加:
TRANSLATIONS = En.ts
TRANSLATIONS = Ch.ts
1、先打开控制台输入lupdate Test.pro
将会自动生成Ch.ts和En.ts两个(如果要加更多在Test.pro里改)
2、再用linguist打开ts文件,分别输入翻译内容
3、再打开控制台输入lrelease Test.pro即可生成exe需要的.qm文件
测试效果:
qt4.7工程源码下载
http://download.csdn.net/detail/wangningyu/9687082