Qt GUI设计 界面语言动态切换(2)

来源:互联网 发布:4000公里高铁 知乎 编辑:程序博客网 时间:2024/06/07 00:30

接着上次做的语言切换

上次实现了语言动态切换,但是并不能保存,就是下次打开时语言又会恢复成原来的

这次程序中加入语言配置文件,每次语言修改会记录保存,下次打开时语言就是上次保存的。

代码如下

#include "dialog.h"

#include "ui_dialog.h"
#include <QDebug>
#include <QTranslator>
#include <iostream>
#include <QtCore>
Dialog::Dialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialog)
{
    ui->setupUi(this);
    this->setWindowTitle(tr("hello translator"));
    connect(this->ui->pushButton_2,SIGNAL(clicked()),this,SLOT(close()));
    connect(this->ui->comboBox,SIGNAL(activated(int)),SLOT(switchlanguage(int)));
    connect(this->ui->pushButton_chinese,SIGNAL(clicked()),SLOT(to_chinese()));
    connect(this->ui->pushButton_english,SIGNAL(clicked()),this,SLOT(to_english()));
}
Dialog::~Dialog()
{
    delete ui;
}
void Dialog::switchlanguage(int flag)
{
    qDebug("flag=%d",flag);
    QTranslator translator(qApp);
       bool b = false;
    if(flag==0)
    {
        //chinese
           b = translator.load("hellotr_CH.qm");
           if(b==false)
               qDebug("load err!");
           else
               qDebug("chinese load ok");
           qApp->installTranslator(&translator);
           this->ui->retranslateUi(this);
           QFile file("language_set.txt");
           if (file.open(QFile::WriteOnly)){
               QTextStream out(&file);
               out<<"hellotr_CH.qm";
               file.close();
           }
    }
    else if(flag==1)
    {
       // english
           b = translator.load("hellotr_EN.qm");
           if(b==false)
           {
               qDebug("load err!");
           }
           else
           {
               qDebug("english load ok");
               qApp->installTranslator(&translator);
               this->ui->retranslateUi(this);
               QFile file("language_set.txt");
               if (file.open(QFile::WriteOnly)){
                   QTextStream out(&file);
                   out<<"hellotr_EN.qm";
                   file.close();
               }
           }
    }
}
void Dialog:: to_chinese(void)
{
    qDebug("to chinese clicked");
    QTranslator translator(qApp);
       bool b = false;
       b = translator.load("hellotr_CH.qm");
       if(b==false)
           qDebug("load err!");
       else
       {
           qDebug("chinese load ok");
           qApp->installTranslator(&translator);
           this->ui->retranslateUi(this);
           this->ui->comboBox->setCurrentIndex(0);
           QFile file("language_set.txt");
           if (file.open(QFile::WriteOnly)){
               QTextStream out(&file);
               out<<"hellotr_CH.qm";
               file.close();
           }
        }
}
void Dialog::to_english(void)
{
    qDebug("to_english clicked");
    QTranslator translator(qApp);
       bool b = false;
       b = translator.load("hellotr_EN.qm");
       if(b==false)
           qDebug("load err!");
       else
       {
           qDebug("english load ok");
           qApp->installTranslator(&translator);
           this->ui->retranslateUi(this);
           this->ui->comboBox->setCurrentIndex(1);
           QFile file("language_set.txt");
           if (file.open(QFile::WriteOnly)){
               QTextStream out(&file);
               out<<"hellotr_EN.qm";
               file.close();
           }
       }
}

 

#include <QtGui/QApplication>

#include "dialog.h"
#include <QTranslator>
#include <QDebug>
#include <QTextCodec>
#include <iostream>
#include <QtCore>
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QFile file("language_set.txt");
    QString language;
    if(file.open(QFile::ReadOnly))
    {
        QTextStream in(&file);
        in>>language;
        qDebug("language=%s",qPrintable(language));
    }
    QTranslator translator(0);
    bool b = false;
    b = translator.load(language);
    if(b==false)
        qDebug("load err!");
    else
        qDebug("load ok");
    a.installTranslator(&translator);
    Dialog w;
    w.show();
    return a.exec();
}

 

原创粉丝点击