Qt之切换语言的方法(传统数组法与Qt语言家)

news2024/9/22 15:09:40

http://t.csdn.cn/BVigB

传统数组法:

定义一个字符串二维数组,

QString weekStr[2][7] = {"星期一","星期二","星期三","星期四","星期五","星期六","星期日",\
"Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"};
void MainWindow::on_comboBox_currentIndexChanged(int index)
{
    static int lastindex = 0;
    if(index == lastindex)
        return;
    lastindex = index;
    QList<QLabel *> lbs = this->findChildren<QLabel *>();
    int i_cnt = 0;
    foreach (QLabel *lb, lbs) {
        lb->setText(tr("%1").arg(weekStr[index][i_cnt++]));
    }
    for(int i = 0;i<2;i++){
        ui->comboBox->setItemText(i,language[index][i]);
    }
}
 

接下来就可以看到效果

但是这只是在你字体少的情况,如果你字体很多,你就可以使用qt自带的语言家

具体操作如下:

对用户可见的文本信息全部使用tr()进行封装。至于为什么一定要用tr可以看

https://blog.csdn.net/liang890319/article/details/7041786​​​​​​​
在pro中添加:
TRANSLATIONS += ts_zh.ts  ts_en.ts
此时你只需要在界面ui写好控件名

然后选择:工具->外部->Qt语言家->更新翻译,则会生成对应的ts文件。


翻译:使用Qt Linguist打开要翻译的ts文件,对翻译源进行相应语言的翻译。

 
 

将这些英文翻译输入后,点击问号

然后保存->发布即可

在qt的语言家刚才更新翻译,现在选发布翻译

此时你肯定已经有了两个qm文件,将其添加到资源文件

在combox里添加:

void MainWindow::on_comboBox_currentIndexChanged(int index)
{
    static int lastIndex = 0;
    if(index == lastIndex)
        return;
    lastIndex = index;
    static  QTranslator*  translator;
    if  (translator  !=  NULL){
        qApp->removeTranslator(translator);
        delete  translator;
        translator  =  NULL;
    }
    translator  =  new  QTranslator;
    if(index==0){
        if(translator->load(":/tr_zh.qm")){
            qApp->installTranslator(translator);
        }
    }else{
        if(translator->load(":/tr_en.qm")){
            qApp->installTranslator(translator);
            }
        }
    ui->label->setText(tr("星期一"));
    ui->label_2->setText(tr("星期二"));
    ui->label_3->setText(tr("星期三"));
    ui->label_4->setText(tr("星期四"));
    ui->label_5->setText(tr("星期五"));
    ui->label_6->setText(tr("星期六"));
    ui->label_7->setText(tr("星期日"));
    ui->comboBox->setItemText(0,tr("中文"));
    ui->comboBox->setItemText(1,tr("英文"));
}
 

切记,更新了翻译一定要重新settext或者刷新ui,不然不会生效

此生成的文件就可以中英文动态切换显示

我这里是因为用combox必须settext,如果你们不是combox是radiobutton就更方便了,直接刷新ui

代码更是简单:

如果不需要动态切换,那么你只需要

就只在初始的时候生效了
 

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

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

相关文章

2023级中国社科院美国杜兰大学中外合作办学双证能源管理硕士

2023级中国社科院美国杜兰大学中外合作办学双证能源管理硕士 作为国内首个且唯一侧重能源金融交易的硕士项目&#xff0c;中国社会科学院大学与美国杜兰大学合作举办的能源管理硕士&#xff08;Master of Management in Energy&#xff09;项目旨在培养具备国际视野的高级能源…

基于XDMA 中断模式的 PCIE3.0 QT上位机与FPGA数据交互架构 提供工程源码和QT上位机源码

目录 1、前言2、我已有的PCIE方案3、PCIE理论4、总体设计思路和方案图像产生、发送、缓存数据处理XDMA简介XDMA中断模式图像读取、输出、显示QT上位机及其源码 5、vivado工程详解6、上板调试验证7、福利&#xff1a;工程代码的获取 1、前言 PCIE&#xff08;PCI Express&#…

权威认可丨九州未来获科学技术成果登记证书

近日&#xff0c;由九州未来自主研发的工业项目——“5G”边缘计算云平台的产品研究及其在工业视觉AI设计中的应用&#xff0c;经评审、公示获准登记&#xff0c;取得浙江省科技厅颁发的科学技术成果登记证书。 伴随我国在新基建领域不断推进深入&#xff0c;5G以其特有的大带宽…

Vue教程(三):计算属性

1、姓名案例—插值语法版 代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>姓名案例-插值语法版</title><script type"text/javascript" src"../js/vue.js"><…

IDEA中文UT方法执行报错问题、wps默认保存格式

wps默认保存格式、IDEA中文UT方法执行报错问题 背景 1、wps修改文件后&#xff0c;编码格式从UTF-8-bom变成UTF-8&#xff08;notepad可以查看&#xff09;&#xff1b; 2、IDEA中文UT执行报错&#xff1a; 解决方案 1、语言设置中不要勾选 “Beta版。。。。” 2、cmd中执…

Vue-cli3项目之Vue.config.js配置文件—取代vue-cli2中build与config

我们在做vue项目的时候&#xff0c;在根目录中肯定都看到过一个vue.config.js文件&#xff0c;那么这个文件在整个项目中到底有什么作用呢&#xff1f;本文就来说说使用Vue-cli3 创建的vue项目中&#xff0c;Vue.config.js文件的配置问题。 说点题外话&#xff0c;先来看看vue-…

隐藏文件夹怎么显示?3种方法轻松解决!

“我有些文件不知道为什么就看不到了&#xff0c;不知道是因为我不小心将它们隐藏了还是删除了。有家人知道隐藏文件怎么显示的吗&#xff1f;非常着急&#xff0c;感谢回答&#xff01;” 为了保护我们的隐私&#xff0c;有些重要的文件我们不想将其被人看到&#xff0c;一个…

2017年全国硕士研究生入学统一考试管理类专业学位联考写作试题——解析版

2017年1月真题 四、写作&#xff1a;第56~57小题&#xff0c;共65 分。其中论证有效性分析30 分&#xff0c;论说文35分。 56、论证有效性分析&#xff1a; 分析下述论证中存在的缺陷和漏洞&#xff0c;选择若干要点&#xff0c;写一篇600字左右的文章&#xff0c;对论证的有…

【启扬方案】嵌入式核心板在全自动生化仪设备中的应用

随着科技的不断进步和医疗技术的发展&#xff0c;全自动生化分析仪作为体外诊断领域的重要工具之一&#xff0c;逐渐受到广泛的关注。全自动生化分析仪作为一种能够实时监测和分析体液中生化指标的设备&#xff0c;在临床医学应用中的用途广泛&#xff0c;可用于检测血液中的血…

Nim游戏博弈论

【模板】nim 游戏 题目描述 https://www.luogu.com.cn/problem/P2197 甲&#xff0c;乙两个人玩 nim 取石子游戏。 nim 游戏的规则是这样的&#xff1a;地上有 n n n 堆石子&#xff08;每堆石子数量小于 1 0 4 10^4 104&#xff09;&#xff0c;每人每次可从任意一堆石子…

管理后台低代码PaaS平台源码:点击鼠标,就能编程

低代码平台源码10大核心功能:1建模引擎 、2 移动引擎 、3,流程引擎 5.报表引擎、6安全引擎、 7 API引擎 、8.应用集成引擎、 9.代码引擎、 10.公式引擎。 一、低代码开发特色 1.低代码开发&#xff1a;管理后台提供了一系列易于使用的低代码开发工具&#xff0c;使企业可以快速…

CSPM难度大吗?对比pmp怎么样?

CSPM证书是刚出来的&#xff0c;难度不会很大&#xff0c;大家都知道 PMP 证书是从国外引进的&#xff0c;近几年很热门&#xff0c;持证人数已经高达 90 余万了&#xff0c;但是目前我们和老美关系大家有目共睹&#xff0c;一直推国际标准和美国标准感觉有点奇怪。 现在新出台…

React Flow

// 创建项目 npm create vitelatest my-react-flow-app -- --template react // 安装插件 npm install reactflow // 运行项目 npm run dev 1、App.jsx import { useCallback, useState } from react; import ReactFlow, {addEdge,ReactFlowProvider,MiniMap,Controls,useNode…

适用于虚拟环境的免费企业备份软件

多年来&#xff0c;许多行业严重依赖物理服务器提供计算资源——你可以想象到巨大的服务器机房和笨重的服务器的场景。 然而&#xff0c;随着业务快速增长&#xff0c;许多组织发现物理服务器已经无法有效利用计算资源。因此&#xff0c;为了节省成本&#xff0c;引入了虚拟服…

STL中 vector常见函数用法和迭代器失效的解决方案【C++】

文章目录 size && capacityreserveresizeempty迭代器begin和end push_back &&pop_backinsert && erasefindswap[ ]范围for遍历vector迭代器失效问题 size && capacity #include <iostream> #include <vector> using namespace st…

一文搞懂如何在群晖NAS中使用cpolar实现【内网穿透】

文章目录 1.1前言2.如何在群晖nas中使用cpolar内网穿透2.1第一步——进入套件中心2.2第二步——管理cpolar套件2.3第三步——建立专属的数据隧道2.4 第四步——查看本地数据隧道状态是否激活 3.结语 1.1前言 今天&#xff0c;我们来为大家介绍&#xff0c;如何在群晖系统中&am…

设计模式-命令模式在Java中的使用示例-桌面程序自定义功能键

场景 欲开发一个桌面版应用程序&#xff0c;该应用程序为用户提供了一系列自定义功能键&#xff0c;用户可以通过这些功能键来实现一些快捷操作。 用户可以将功能键和相应功能绑定在一起&#xff0c;还可以根据需要来修改功能键的设置&#xff0c;而且系统在未来可能还会增加…

做外贸工厂跳过我联系了客户

在我十多年外贸创业历程里&#xff0c;遇过不少想跳过我直接和客户联系的供应商。 譬如给客户发邮件&#xff0c;悄咪咪将我从抄送里删掉。又或者偷偷将名片塞在货柜里&#xff0c;期望客户一开箱就能看到。 然而这么多年过去&#xff0c;一次让他们得逞的机会都没有。每一次…

C++多线程编程(第三章 案例1,使用互斥锁+ list模拟线程通信)

主线程和子线程进行list通信&#xff0c;要用到互斥锁&#xff0c;避免同时操作 1、封装线程基类XThread控制线程启动和停止&#xff1b; 2、模拟消息服务器线程&#xff0c;接收字符串消息&#xff0c;并模拟处理&#xff1b; 3、通过Unique_lock和mutex互斥方位list 消息队列…

【力扣每日一题】2023.7.28 并行课程3

目录 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 代码&#xff1a; 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 题目给我们课程表以及每门课需要学习的时间&#xff0c;我们可以同时学任意数量的课程&#xff0c;但是学习的条件是先修课程都已经学完了…