zhonghua

C++博客 首页 新随笔 联系 聚合 管理
  72 Posts :: 1 Stories :: 4 Comments :: 0 Trackbacks

摘要:本文论述了如何使用QT实现程序的多语系支持以及多语系的动态切换。

前沿

我们生活中用到的程序大多都是支持单一语言的,比如在中国我们用到的软件大多是汉语的,也有很少部分使用的是英语的,但是很少有软件可以实现两种语 言的动态切换。不过随着近几年我国的发展支持多国语言的软件也越来越多,比如上海地铁售票机,动车组自动售票机等都是支持汉语和英语两种语言的。使用QT 编程可以很容易的编写支持多国语言的软件。

用QT实现多国语言支持有两种情况:

第一种:使用UI编辑器来自动生成界面,这种方式实现多语系的动态切换很容易。

第二种:不使用UI编辑器,自己通过亲自编程来设计应用程序界面,这种方式实现多语系动态切换比较繁琐,注意不是难;

下面先来介绍第一种的实现方法:

void MainWindow::ch_language()
{
    if(this->languageState)
    {
        this->languageState=CHINESE ;
        this->translator.load("test_ch") ;
        this->pOwner->installTranslator(&(this->translator));
    }
    else
    {
        this->languageState=ENGLISH ;
        this->translator.load("test_en") ;
        this->pOwner->installTranslator(&(this->translator));
    }
}
这个函数是实现动态切换的主要程序,其中languageState是用来记录当前语言的状态,pOwner是QApplication对象,我们只需使用QTranslator加载不同的文件就可以实现多语系的动态切换。

第二种方式就不那么简单了,除了要运行上述函数外还要将将要切换的语言重新设置一遍。

void MainWindow::langChang()
{
    if(this->langState)
    {
        this->langState=CHINESE ;
        this->translator.load("test_ch") ;
        this->pOwner->installTranslator(&(this->translator));
    }
    else
    {
        this->langState=ENGLISH ;
        this->translator.load("test_en") ;
        this->pOwner->installTranslator(&(this->translator));
    }

    this->setWindowTitle(QObject::tr("hello world"));
    this->addFileAction->setText(QObject::tr("New File"));
    this->langChAction->setText(QObject::tr("Chinese"));
    this->playAction->setText(QObject::tr("Play")); ;
    this->stopAction->setText(QObject::tr("Stop"));
    this->menuBar()->addMenu(QObject::tr("FIle")) ;
    this->menuBar()->addMenu(QObject::tr("Control")) ;
}

因此比较麻烦,特别是界面比较繁琐的时候,将是很麻烦的。

下面来讨论为什么第一种方法为什么不需要重新设置语言了。因为使用Ui时有这个函数

void MainWindow::changeEvent(QEvent *e)
{
    QMainWindow::changeEvent(e);
    switch (e->type()) {
    case QEvent::LanguageChange:
        ui->retranslateUi(this);//这里实现语言翻译器的更新。

posted on 2012-03-22 16:17 米米 阅读(4097) 评论(0)  编辑 收藏 引用 所属分类: qt

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理