Qt中英文切换(涉及多种场景)

编程入门 行业动态 更新时间:2024-10-27 15:25:23

Qt<a href=https://www.elefans.com/category/jswz/34/1765392.html style=中英文切换(涉及多种场景)"/>

Qt中英文切换(涉及多种场景)

qt中英文切换涉及到一个软件两个文件,分别是QtLinguist、.ts文件和.qm文件。

1、在Pro中添加

TRANSLATIONS += en.ts \
               ch.ts

添加这个文件后qmake,然后如下操作点击更新:

这个时候会生成2两个文件en.ts和ch.ts。

2、将这两个文件添加到项目中方便修改。

3、这个时候我们可以在工程中进行准备工作了。
首先把代码中除.ui文件外的所有中文使用tr()括起来,使Qt Linguist能够识别到。
然后如下操作

使用QtLinguist方式打开。

找出所有需要翻译的中文,在下面输入栏中进行翻译。
翻译后点击以下操作进行确定。
然后点击保存。

最后如下进行发布。

发布后会生成两个.qm文件。
将文件放在执行文件同级目录,方便后面进行加载。

4、加载qm文件实时切换中英文。

void Widget::on_pushButton_clicked()
{
    qDebug()<<m_translator->load(QApplication::applicationDirPath()+"/en.qm");
    qApp->installTranslator(m_translator);
    ui->retranslateUi(this);

}

void Widget::on_pushButton_2_clicked()
{
    qDebug()<<m_translator->load(QApplication::applicationDirPath()+"/ch.qm");
    qApp->installTranslator(m_translator);
    ui->retranslateUi(this);
}

这步完成后基本上只有主页在.ui文件中的控件可以实时中英文切换,但是还有很多切换没有成功。

4、这个时候有其它场景的中英文切换如下。
场景1:UI文件中的控件翻译,其它页面的.ui需要进入事件来进行配置。如下

void Form::changeEvent(QEvent *event)
{
    if(event->type() == QEvent::LanguageChange){
        this->ui->retranslateUi(this);
    }
}

场景2:主页和其它页非.ui文件中的控件(控件为成员对象时)

void Form::changeEvent(QEvent *event)
{
    if(event->type() == QEvent::LanguageChange){
        this->ui->retranslateUi(this);
        m_label->setText(tr("你好"));
        m_label2->setText(tr("测试2"));
    }
}

跟上面是不是很像,没错就是大部分一样,但是

this->ui->retranslateUi(this);

它只能修改.ui中的中英文,非.ui的需要自己来加载。

场景3:主页和其它页非.ui文件中的控件(控件为局部对象时)
这个就是控件在函数里面创建,翻译方法如下:

Form2::Form2(QWidget *parent) :
    QWidget(parent)
{
    QLabel* lab = new QLabel(tr("武汉加油"),this);
    lab->setGeometry(0,0,120,20);

    QPushButton* btn = new QPushButton(tr("武汉加油"),this);
    btn->setGeometry(0,30,120,20);
}

Form2::~Form2()
{
}

void Form2::changeEvent(QEvent *event)
{
    if(event->type() == QEvent::LanguageChange){
        QList<QLabel *> labs =this->findChildren<QLabel *>();
        foreach (QLabel *lab, labs)
        {
          lab->setText(tr("武汉加油"));
        }

        QList<QPushButton *> btns =this->findChildren<QPushButton *>();
        foreach (QPushButton *btn, btns)
        {
          btn->setText(tr("武汉加油"));
        }
    }
}

以上是介绍实时中英切换的,但是同时存在一个中文版本和一个英文版本是没有这么复杂的,直接加载.qm文件就行了,后面操作基本上都不需要了。

这里还介绍一个更简单的实时切换中英文的方法:
如下:
.cpp文件

void Widget::on_pushButton_clicked()
{
    qDebug()<<m_translator->load(QApplication::applicationDirPath()+"/en.qm");
    qApp->installTranslator(m_translator);
    ui->retranslateUi(this);
    qApp->exit();

}

void Widget::on_pushButton_2_clicked()
{
    qDebug()<<m_translator->load(QApplication::applicationDirPath()+"/ch.qm");
    qApp->installTranslator(m_translator);
    ui->retranslateUi(this);
    qApp->exit();
}

main.cpp文件:

    UMainWindow w;
    w.show();
    bool ok = a.exec();
    f(!ok)
    {
        QProcess::startDetached(qApp->applicationFilePath(), params);
        return ok;
    }

这种是通过自动重启来实现的中英文切换。



源码

更多推荐

Qt中英文切换(涉及多种场景)

本文发布于:2023-08-07 04:54:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1327111.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:中英文   场景   多种   Qt

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!