【Qt QML】Qt Linguist使用方法

news2024/12/27 1:25:57

1. 简介

应用开发过程中,有时候需要翻译成多种语言,例如:将界面上所有中文翻译成英文,以适应国外市场。

针对多语言切换需求,Qt有一个Qt Linguist解决方案。

在所有需要翻译的字符串处使用qsTr()函数,Qt提取出所有qsTr()函数的参数,使用Qt Linguist对其进行翻译后发布,Qt程序可以在运行时加载发布的翻译文件以更新文本字符串。

2. 使用方法

下面以QML工程为例介绍:
Qt版本:Qt 5.15.2
Qt Creator: Qt Creator 10.0.2

2.1 新建QML工程

  • 工程名:language_test

  • main.qml 代码

import QtQuick 2.15
import QtQuick.Window 2.15

Window {
    width: 640
    height: 480
    visible: true
    title: qsTr("你好")

    Rectangle{
        width: 100
        height: 100

        Text{
            text: qsTr("你好")
        }
    }
}
  • main.cpp代码
#include <QGuiApplication>
#include <QQmlApplicationEngine>

int main(int argc, char *argv[])
{
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
    QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
#endif
    QGuiApplication app(argc, argv);

    QQmlApplicationEngine engine;
    const QUrl url(QStringLiteral("qrc:/main.qml"));
    QObject::connect(&engine, &QQmlApplicationEngine::objectCreated,
        &app, [url](QObject *obj, const QUrl &objUrl) {
            if (!obj && url == objUrl)
                QCoreApplication::exit(-1);
        }, Qt::QueuedConnection);
    engine.load(url);

    return app.exec();
}

  • language_test.pro
QT += quick

# You can make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0

SOURCES += \
        main.cpp

RESOURCES += qml.qrc

# Additional import path used to resolve QML modules in Qt Creator's code model
QML_IMPORT_PATH =

# Additional import path used to resolve QML modules just for Qt Quick Designer
QML_DESIGNER_IMPORT_PATH =

# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
  • 运行效果
    在这里插入图片描述

2.2 生成需要翻译的文件

  • .pro文件中添加下面一行
TRANSLATIONS = ui.ts

在这里插入图片描述

  • 在Qt Creator菜单栏上选择【工具】-【外部】-【Qt语言专家】-【更新翻译】
  • 在工程目录下会生成ui.ts文件
    在这里插入图片描述

2.3 翻译

  • 在开始菜单找到Linguiset,打开Qt语言专家工具
    在这里插入图片描述
    在这里插入图片描述
  • 打开生成的ui.ts文件,选择目标语言
    -在这里插入图片描述
  • 依次翻译需要翻译的词
    在这里插入图片描述
  • 翻译完成后,点击保存

2.4 加载翻译好的语言

  • 在Qt Creator菜单栏上选择【工具】-【外部】-【Qt语言专家】-【发布翻译】
  • 此时工作目录会生成ui.qm文件
    在这里插入图片描述
  • 在main.cpp文件中,加载生成的ui.qm文件
#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QTranslator>	//添加头文件


int main(int argc, char *argv[])
{
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
    QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
#endif
    QGuiApplication app(argc, argv);

    //  ------  载入翻译 -------
    QTranslator translator; // 新建翻译类
	// 导入生成的文件, 下面两种表示方法都可以
	//注意:要用绝对路径
	//注意:如果在嵌入式linux开发板中运行,需要将ui.qm文件拷贝到开发板中,这里缓存开发板中的路径
    //translator.load("D:/language_test/ui.qm", "."); //win
    translator.load("D:\\language_test\\ui.qm", ".");  //win
    //translator.load("/home/book/qt_code/language/language/ui.qm", "."); //ubuntu
    app.installTranslator(&translator); //装入
    //  ------  载入翻译 -------

    QQmlApplicationEngine engine;
    const QUrl url(QStringLiteral("qrc:/main.qml"));
    QObject::connect(&engine, &QQmlApplicationEngine::objectCreated,
        &app, [url](QObject *obj, const QUrl &objUrl) {
            if (!obj && url == objUrl)
                QCoreApplication::exit(-1);
        }, Qt::QueuedConnection);
    engine.load(url);

    return app.exec();
}

2.5 运行效果

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1120135.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

负采样:如何高效训练词向量

Negative Sampling 1.何为负采样 负采样是一种用于训练词嵌入模型的采样方法&#xff0c;特别适用于处理大规模词汇表的情况。负采样的目标是降低计算成本并改善模型的性能&#xff0c;同时有效地训练词向量。 2.为什么需要负采样 在传统的词嵌入模型中&#xff0c;如Word…

CleanMyMac X2024讲解及如何下载?

您是否曾经为Mac电脑的性能下降、存储空间不足而烦恼&#xff1f;是否希望有一个简单而高效的解决方案来优化您的Mac系统&#xff1f;那么&#xff0c;我向您介绍一款非常出色的工具&#xff1a;CleanMyMac X。它能够轻松处理这些问题&#xff0c;并让您的Mac恢复到最佳状态。 …

C++前缀和算法的应用:向下取整数对和 原理源码测试用例

本文涉及的基础知识点 C算法&#xff1a;前缀和、前缀乘积、前缀异或的原理、源码及测试用例 包括课程视频 题目 向下取整数对和 给你一个整数数组 nums &#xff0c;请你返回所有下标对 0 < i, j < nums.length 的 floor(nums[i] / nums[j]) 结果之和。由于答案可能会…

2023-10-17 LeetCode每日一题(倍数求和)

2023-10-17每日一题 一、题目编号 2652. 倍数求和二、题目链接 点击跳转到题目位置 三、题目描述 给你一个正整数 n &#xff0c;请你计算在 [1&#xff0c;n] 范围内能被 3、5、7 整除的所有整数之和。 返回一个整数&#xff0c;用于表示给定范围内所有满足约束条件的数…

深度学习推荐系统架构、Sparrow RecSys项目及深度学习基础知识

文章目录 &#x1f31f; 技术架构&#xff1a;深度学习推荐系统的经典技术架构长啥样&#xff1f;&#x1f34a; 一、深度学习推荐系统的技术架构&#x1f34a; 二、基于用户行为的推荐&#x1f34a; 三、基于多模态数据的推荐&#x1f34a; 四、基于知识图谱的推荐 &#x1f3…

CEC2023:基于自适应启动策略的混合交叉动态约束多目标优化算法(MC-DCMOEA)求解CEC2023(提供MATLAB代码及参考文献)

一、动态多目标优化问题 1.1问题定义 1.2 动态支配关系定义 二、 基于自适应启动策略的混合交叉动态多目标优化算法 基于自适应启动策略的混合交叉动态多目标优化算法&#xff08;Mixture Crossover Dynamic Constrained Multi-objective Evolutionary Algorithm Based on Se…

【Overload游戏引擎细节分析】Lambert材质Shader分析

一、经典光照模型&#xff1a;Phong模型 现实世界的光照是极其复杂的&#xff0c;而且会受到诸多因素的影响&#xff0c;这是以目前我们所拥有的处理能力无法模拟的。经典光照模型冯氏光照模型(Phong Lighting Model)通过单独计算光源成分得到综合光照效果&#xff0c;然后添加…

Modelsim无法生成LICENSE的问题

按照网上的破解教程&#xff0c;将mgls.dll和mgls64.dll属性都是去掉只读后&#xff0c;点击patch64_dll.bat文件生成LICENSE&#xff0c;发现在弹出的对话框中一直提示找不到其文件&#xff0c;无法正常生成LICENSE。 解决方法&#xff1a; 1.按winR键或者在电脑搜索界面中输…

C/C++ const相关 常量指针 常指针 常指针常量 顶层底层const

文章目录 前言const限定符初始化const引用指针和const顶层和底层const总结 前言 在看const相关内容的时候&#xff0c;对const的一些概念还存在部分疑惑&#xff0c;容易搞混&#xff0c;尤其是在变量声明这种情况下。 这篇博客就主要写一下const的相关。 const限定符 const主…

npm 无法将“npm”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。

一、报错&#xff1a; npm : 无法将“npm”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写&#xff0c;如果包括路径&#xff0c;请确保路径正确&#xff0c; 然后再试一次。 所在位置 行:1 字符: 1npm init -y~~~ CategoryInfo : ObjectNotFo…

✔ ★【备战实习(面经+项目+算法)】 10.21学习时间表(总计学习时间:5h30min)(算法刷题:7道)

✔ ★【备战实习&#xff08;面经项目算法&#xff09;】 坚持完成每天必做如何找到好工作1. 科学的学习方法&#xff08;专注&#xff01;效率&#xff01;记忆&#xff01;心流&#xff01;&#xff09;2. 每天认真完成必做项&#xff0c;踏实学习技术 认真完成每天必做&…

模拟量开关量防抖算法(模拟量超限报警功能块)

模拟量信号的防抖,除了了可以采用延时方法。还可以采用死区过滤器实现,死区过滤器详细算法解读和完整源代码,请查看下面文章博客: PLC信号处理系列之死区滤波器(DeadZone)-CSDN博客(*死区滤波器*)ELSErValue:=rX;END_IF;博途PLC信号处理系列之限幅消抖滤波_RXXW_Dor的博…

ucos练习

文章目录 简单实验在开始任务中创建优先级不同的多个任务使用信号量进行同步 UCOS 硬件实现任务管理任务调度 zynq ucos 简单实验 在开始任务中创建优先级不同的多个任务 int main() {UCOSStartup(MainTask);return 0; }void MainTask (void *p_arg) {OS_ERR os_err;…

42905-2023 碳化硅外延层厚度的测试 红外反射法

1 范围 本文件描述了采用红外反射法测试碳化硅外延层厚度的方法。 本文件适用于 n 型掺杂浓度大于110⁸ cm⁻ 的碳化硅衬底上同质掺杂浓度小于110⁵ cm⁻ 的 同质碳化硅外延层厚度的测试&#xff0c;测试范围为3μm&#xff5e;200μm。 2 规范性引用文件 下列文件中的内容…

Go并发编程之一

一、前言 新年学新语言Go系列文章已经完结&#xff0c;用了最简单的例子去了解Go基础语法&#xff0c;但Go最牛B的是它对并发的友好支持&#xff0c;每一门语言都有它自己独特的优势&#xff0c;如Java适合大型工程化项目&#xff0c;Python适合做数据分析及运维脚本&#xff0…

我单方面宣布:腾讯云服务器优惠价格(双11特价)

2023腾讯云双十一服务器优惠价格表多少钱一年&#xff1f;轻量服务器2核2G3M、2核2G4M、2核4G5M、4核8G12M、8核16G18M、16核32G28M和云服务器CVM标准型S5实例优惠价格&#xff0c;腾讯云百科今年双11服务器价格会在当前的价格基础上享受个9折优惠&#xff0c;可领券 https://c…

42911-2023 碳纤维增强复合材料 密封压力容器加速吸湿和过饱和调节方法

1 范围 本文件描述了碳纤维增强复合材料加速吸湿和过饱和调节的方法&#xff0c;该方法在温度高于100 ℃但低 于试验材料玻璃化转变温度(T) 的饱和水蒸气密封压力容器中进行。 本文件适用于玻璃化转变温度大于150℃的热固性碳纤维增强复合材料。热塑性碳纤维增强复合 材料也…

YOLOV8目标检测——模型训练

文章目录 1下载yolov8&#xff08;[网址](https://github.com/ultralytics/ultralytics)&#xff09;2用pycharm打开文件3训练自己的YOLOV8数据集4run下运行完了之后没有best.pt文件5导出为onnx文件 本章内容主要解决如何训练自己的YOLOV8模型。 1下载yolov8&#xff08;网址&a…

17.1 隐藏执行CMD命令

本章内容涉及使用Socket API和CMD命令行工具实现本地CMD命令执行、无管道正向CMD和无管道反向CMD三种功能。执行本地CMD实现使用CreateProcess函数创建一个新的CMD进程&#xff0c;并将标准输入、输出和错误输出重定向到当前进程的标准输入、输出和错误输出。无管道正向CMD和无…

vue阻止浏览器刷新,达到业务逻辑的实现,在Ts+vue中使用组件内路由守卫

vue阻止浏览器刷新&#xff0c;达到业务逻辑的实现 有类似的需求&#xff0c;页面存在编辑框或者文本输入或者其他&#xff0c;当用户进入编辑状态时&#xff0c;如果没有点击保存就离开页面&#xff0c;需弹窗提示。chrome浏览器手动刷新时如果处于编辑状态也弹出相应的阻止功…