QT笔记——多语言翻译

news/2025/2/6 9:58:19 标签: qt, 笔记, 数据库

文章目录

    • 1、概要
    • 2、多语言切换
      • 2.1、结果展示
      • 2.2、创建项目
      • 2.2、绘制UI
      • 2.2、生成“.st”文件
      • 2.4、生成“.qm”文件
      • 2.5、工程demo

1、概要

借助QT自带的翻译功能,实现实际应用用进行 “多语言切换”

2、多语言切换

2.1、结果展示

多语言切换

2.2、创建项目

1、文件,创建“新项目”————》“Application”————》“Qt Widgets Application”;
2......

在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

2.2、绘制UI

1)、菜单栏创建“QMenu”,模拟正常软件控件布局;
(2)、QMenu直接双击,输入对应的命名昵称,按键盘“Enter”键才会生效(有点bug哈);
(3)、创建QMenu下的QAction时,命名需要复制粘贴进去,再“Enter”键,直接输入不生效;
(4)、简单拖入两个QLable按钮,便于直观看到效果;

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

2.2、生成“.st”文件

    (1)、在.pro工程目录下,手动创建“translate”文件夹,用于存放需要添加的语种的.ts文件;

//注意这里的.ts文件名称是你自己命名的,自己记住那个语言对应哪个文件即可,一般习惯上使用各语种的简写,后续载入对应的qm语言文件做到对应正确就行。
//当前因为选中语种为“中文、英文、日语”,故命名如下所示;
TRANSLATIONS += \
    translate/LanguageTest_cn.ts\
    translate/LanguageTest_en.ts\
    translate/LanguageTest_jp.ts

在这里插入图片描述
    (2)、在QT菜单栏,选中“工具”——》选中“外部”——》选中“QT语言家”——》单机“lupdate”工具;
在这里插入图片描述在这里插入图片描述在这里插入图片描述

2.4、生成“.qm”文件

1)、找到安装目录下“bin”文件中的“linguist.exe”工具;
(2)、 双击“linguist.exe”工具,将QT生成的“.ts”文件拖入其中;
(3)、根据需要,进行对应的翻译,直达所有的控件皆翻译完成,如下图所示;
(4)、单机“linguist.exe”菜单栏中的“文件”,选择“保存”并“全部另存为”;

在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述

2.5、工程demo

//main.cpp
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[]){
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}
//mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QString>
#include <QDebug>
#include <QApplication>
#include <QTranslator>
#include <QFileInfo>

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT
public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private slots:
    void onMenulanguageTriggered(QAction *action);  //UI按钮触发,切换翻译
    void onLanguageTrans(int index);  //加载翻译的.qm文件

private:
    Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
//mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    connect(ui->menu_language, &QMenu::triggered, [&](QAction *action) {
        onMenulanguageTriggered(action);
    });  //UI切换按钮,就直接触发“onMenulanguageTriggered()”函数,获取QMenu当前被选中的QAction
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::onLanguageTrans(int index)
{
    static QTranslator* translator;  //初始化QT自带的翻译类“QThranslator”
    if(translator!=NULL)
    {
       qApp->removeTranslator(translator);
       delete translator;
       translator=NULL;
    }
   translator=new QTranslator();

    QString strLanguagePath;
    switch (index) {
    case 1:
        // chinese
        strLanguagePath = QCoreApplication::applicationDirPath() + "/translate/" + "LanguageTest_cn.qm";
        break;
    case 2:
        // English
        strLanguagePath = QCoreApplication::applicationDirPath() + "/translate/" + "LanguageTest_en.qm";
        break;
    case 3:
        //jp
        strLanguagePath = QCoreApplication::applicationDirPath() + "/translate/" + "LanguageTest_jp.qm";
        break;
    }
    if(translator->load(strLanguagePath))  //判断.qm文件是否加载成功
    {
        qApp->installTranslator(translator);
        //用于将指定的翻译器安装到应用程序中。安装后,应用程序在显示文本时会优先使用该翻译器提供的翻译文本。
        this->ui->retranslateUi(this);
        //用于重新翻译当前界面上的所有控件文本。当翻译器安装成功后,调用这个函数可以使界面上的文本立即更新为新的翻译内容。
    }
    else
    {
       qDebug()<<"load failed";
    }
}


void MainWindow::onMenulanguageTriggered(QAction *action)
{
    //刷新语言
    // 获取菜单中所有动作的列表
    QList<QAction *> actionList = ui->menu_language->actions();
    // 查找触发动作在列表中的索引
    int index = actionList.indexOf(action);
    if (index != -1)
    {
        onLanguageTrans(index);
        qDebug() << "Triggered action index: " << index;
    } else
    {
        qDebug() << "Action not found in menu.";
    }
}

http://www.niftyadmin.cn/n/5842854.html

相关文章

深度学习系列--02.损失函数

一.定义 损失函数&#xff08;Loss Function&#xff09;是机器学习和深度学习中用于衡量模型预测结果与真实标签之间差异的函数&#xff0c;它在模型训练和评估过程中起着至关重要的作用 二.作用 1.指导模型训练 提供优化方向&#xff1a;在训练模型时&#xff0c;我们的目…

Windows图形界面(GUI)-QT-C/C++ - QT Dock Widget

公开视频 -> 链接点击跳转公开课程博客首页 -> ​​​链接点击跳转博客主页 目录 一、概述 二、使用场景 1. 工具栏 2. 侧边栏 3. 调试窗口 三、常见样式 1. 停靠位置 2. 浮动窗口 3. 可关闭 4. 可移动 四、属性设置 1. 设置内容 2. 获取内容 3. 设置标题 …

PyQt6/PySide6 的 QDialog 类

QDialog 是 PyQt6 或 PySide6 库中用于创建对话框的类。对话框是一种特殊的窗口&#xff0c;通常用于与用户进行短期交互&#xff0c;如输入信息、显示消息或选择选项等。QDialog 提供了丰富的功能和灵活性&#xff0c;使得开发者可以轻松地创建各种类型的对话框。下面我将详细…

基于PostGIS的省域空间相邻检索实践

目录 前言 一、相关空间检索函数 1、ST_touches函数 2、ST_Intersects函数 3、ST_Relate函数 4、区别于对比 二、空间相邻检索实践 1、省域表相关介绍 2、相关省域相邻查询 3、全国各省份邻居排名 三、总结 前言 在当今数字化时代&#xff0c;地理空间数据的高效管理…

论文解读:《基于TinyML毫米波雷达的座舱检测、定位与分类》

摘要 本文提出了一种实时的座舱检测、定位和分类解决方案&#xff0c;采用毫米波&#xff08;mmWave&#xff09;雷达系统芯片&#xff08;SoC&#xff09;&#xff0c;CapterahCAL60S344-AE&#xff0c;支持微型机器学习&#xff08;TinyML&#xff09;。提出了波束距离-多普勒…

计算机网络之计算机网络分层结构

一、分层结构概述 计算机网络分层结构将网络通信过程划分为多个层次&#xff0c;每个层次都负责完成特定的任务和功能。这些层次之间通过接口进行通信&#xff0c;上层使用下层提供的服务&#xff0c;并向其上层提供服务。分层结构的设计使得网络通信过程更加模块化和易于管理…

潮汐发电机使用MTi运动传感器在快速水流中保持稳定位置

开发可再生能源是应对气候危机的重要措施。太阳能和风能是可再生能源领域的巨头&#xff0c;但它们的产量是不可预测的&#xff0c;而且是间歇性的。我们很难可靠地预测风力有多强或阳光有多亮。这是国家电网运营商面临的一个问题&#xff0c;他们负责动态平衡能源供应和负载。…

OpenCV YOLOv11实时视频车辆计数线:让车辆进出有条理!

前言 大家好!今天我们聊个超级有趣的课题——如何用OpenCV结合YOLOv11进行实时视频车辆计数。是不是很炫酷?车辆进出全都清晰可见,连“跑车”都能精确统计!不过,别急,这可不仅仅是数车那么简单,背后还有许多实际问题等着你去搞定,比如计数线、车速、误检这些麻烦的小问…