qt5-入门-国际化

参考:
Qt 国际化(上)_w3cschool
https://www.w3cschool.cn/learnroadqt/fwkx1j4j.html

QT5实现语言国际化(中英文界面动态切换,超详细)_qt qevent::languagechange-CSDN博客
https://blog.csdn.net/m0_49047167/article/details/108442111

本地环境:
win10专业版,64位,Qt 5.12


目录

  • 例1:实现翻译效果
  • 例2:通过combobox实现语言切换
  • 例3:通过菜单实现语言切换
  • 例4:读取和保存语言设置
  • 报错:Project ERROR: Cannot run compiler ‘cl‘

例1:实现翻译效果

假设我的项目叫demo,那么在demo.pro中添加一行:

TRANSLATIONS += myapp.ts

myapp.ts是一个xml文件,名字随便起的。

然后用命令行打开demo.pro所在的路径:

C:\Users\xxx\Desktop\demo\demo>lupdate demo.pro
Info: creating stash file C:\Users\xxx\Desktop\demo\demo\.qmake.stash
Updating 'myapp.ts'...Found 98 source text(s) (98 new and 0 already existing)C:\Users\xxx\Desktop\demo\demo>

这说明有98个要翻译的,都没翻译。

用Qt Linguist打开myapp.ts,选择源语言和目标语言,翻译。
在这里插入图片描述
翻译写完后,点击菜单-发布,可以看到原文件夹下面有一个同名的qm文件。(二进制文件,很小)

如果是debug模式的话,把myaqq.qm放到build-demo-Desktopxxxxx-Debug文件夹下(不是放到debug下,跟exe放一起是无效的,虽然很多教程那么教:) )。

修改main():

#include <QTranslator>int main(int argc, char *argv[])
{QApplication a(argc, argv);...QTranslator translator;translator.load("myapp.qm");a.installTranslator(&translator);MainWindow w;w.show();return a.exec();
}	

在这里插入图片描述
注释掉a.installTranslator(&translator);就是未翻译前的状态
在这里插入图片描述

例2:通过combobox实现语言切换

假设mainwindow上有个combobox,里面包含中文和英文两项(以后可以更多)。点击某个语言,当前界面就会切换成另一个语言。
在这里插入图片描述
在这里插入图片描述
首先先照前面写的,准备好中文的翻译,myapp_zh.qm,放到resources下:
在这里插入图片描述
然后在mainwindow的页面上添加一个combobox,然后转到槽,写两个函数;并添加一个全局变量langCode代表语言编号。

...
#include <QTranslator>
...class MainWindow : public QMainWindow {Q_OBJECT
public:explicit MainWindow(QWidget *parent = nullptr);~MainWindow();static int langCode; // 全局变量...
private slots:void on_langComboBox_activated(const QString &arg1);void changeEvent(QEvent *e);...
private:void createWidgets();Ui::MainWindow *ui;QTranslator translator;QApplication *app; };

然后修改源文件:(其中app和translator不需要初始化)

int MainWindow::langCode = 0; // 全局变量初始化
...
void MainWindow::on_langComboBox_activated(const QString &arg1)
{langCode = ui->langComboBox->currentIndex();if (langCode == 0) {translator.load("://resources/lang/myapp_zh.qm");} else if (langCode == 1) {translator.load("://resources/lang/myapp.qm");} else {}app->installTranslator(&translator);
}void MainWindow::changeEvent(QEvent *e) {QWidget::changeEvent(e);switch (e->type()) {case QEvent::LanguageChange:ui->retranslateUi(this);break;default:break;}
}

完成。

例3:通过菜单实现语言切换

这个比较简单。假设菜单栏,文件菜单下有一个切换语言的子菜单,其下有几种语言。当前是中文,如果选择英文,界面会变成英文,同时“英文”前面会打勾。
在这里插入图片描述
假设菜单名称如下:
在这里插入图片描述
在mainwindow.h中增加一个enum,两个槽函数void on_actionEn_triggered()void on_actionExit_triggered()以及一个私有变量Languages language;

enum Languages {ZH,EN,
};

修改mainwindow.cpp,保留上面的void MainWindow::changeEvent(QEvent *e)

void MainWindow::on_actionZh_triggered() {ui->actionZh->setChecked(true);if (language != ZH) {language = ZH;// 其他语言去掉勾选ui->actionEn->setChecked(false);translator.load("://resources/lang/myapp_zh.qm");app->installTranslator(&translator);}
}void MainWindow::on_actionEn_triggered() {ui->actionEn->setChecked(true);if (language != EN) {language = EN;// 其他语言去掉勾选ui->actionZh->setChecked(false);translator.load("://resources/lang/myapp.qm");app->installTranslator(&translator);}
}

例4:读取和保存语言设置

参考之前写的:
qt5-入门-主窗口设计1-CSDN博客
https://blog.csdn.net/pxy7896/article/details/136534754

readSettings()加一个读取和判断,并对设置菜单进行相应的勾选。writeSettings()需要保存变量。代码略。

报错:Project ERROR: Cannot run compiler ‘cl‘

这个是没配置好环境。一般来说,只要将msvc的bin放到环境变量path里就可以了。比如windows中,这个bin可能在:C:\Qt\版本号\msvc2019\bin,我看了下我的Qt文件夹里没有这个,用Everything一搜,发现只有VS下面有:
在这里插入图片描述
因为我是64位的系统,直接把第一行那个路径放入path中即可,然后运行lupdate是正确的。(不需要重启电脑,可能需要重启下cmd)

参考:
Qt环境报错-Project ERROR: Cannot run compiler ‘cl‘. Output_project error: cannot run compiler ‘cl’. output:-CSDN博客
https://blog.csdn.net/qq_43627907/article/details/124528617

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

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

相关文章

【随手记】MySQL窗口函数计算累加和

SELECT id, month, salary,SUM(salary) OVER (ORDER BY month ROWS BETWEEN 2 PRECEDING AND CURRENT ROW) AS rolling_total FROM employee;1.当前行及其前2行累加求和 SUM(salary) OVER (ORDER BY month ROWS BETWEEN 2 PRECEDING AND CURRENT ROW) 是一个窗口函数&#xff…

鸿蒙Harmony应用开发—ArkTS(stateStyles:多态样式)

Styles和Extend仅仅应用于静态页面的样式复用&#xff0c;stateStyles可以依据组件的内部状态的不同&#xff0c;快速设置不同样式。这就是我们本章要介绍的内容stateStyles&#xff08;又称为&#xff1a;多态样式&#xff09;。 概述 stateStyles是属性方法&#xff0c;可以…

uniapp app端跳转到应用商店

uniapp app端跳转到应用商店 安卓是指定包名跳转&#xff0c;iOS需要指定id: if (plus.os.name "Android") {// 跳转安卓应用市场let appurl "market://details?idcom.tencent.mm" //这个是通用应用市场&#xff0c;如果想指定某个应用商店&#xff0…

基于springboot的4S店车辆管理系统

基于springboot的4S店车辆管理系统 的设计和实现 开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09; 数据库工具&#xff1a;Navicat11 开…

c语言食堂就餐排队问题290行

定制魏&#xff1a;QTWZPW&#xff0c;获取更多源码等 目录 题目 数据结构 函数设计 结构设计 总结 效果截图 ​ 主函数代码 题目 设计一个程序来模拟食堂就餐排队问题&#xff0c;通过输入学生人数和面包数量&#xff0c;计算有多少学生能够吃到午餐。 数据结构 该…

【Docker】在 Ubuntu 上安装 Docker 的步骤

在 Ubuntu 上安装 Docker 的步骤如下&#xff1a; 更新包索引并安装必要的软件包以允许 apt 使用 HTTPS&#xff1a; sudo apt update sudo apt install apt-transport-https ca-certificates curl software-properties-common注意&#xff01;网上另有一个命令声称最简洁&am…

25.2 微服务Dubbo

25.2 微服务Dubbo 1. Dubbo简介2. RPC3. Dubbo工作原理4. 代码实操4.1 父项目1. 依赖4.2 服务提供者1. 依赖2. 配置文件3. 启动类4. 业务类4.3 服务消费者1. 依赖2. 配置文件3. 消费者启动类4. 业务:实现远程调用

GPS授时器(NTP校时服务器)助力电子政务系统建设

GPS授时器&#xff08;NTP校时服务器&#xff09;助力电子政务系统建设 GPS授时器&#xff08;NTP校时服务器&#xff09;助力电子政务系统建设 摘要&#xff1a;随着电子政务的不断发展&#xff0c;许多省份都建立了自己的政务网络&#xff0c;使用的网络设备和服务器日益增多…

Tomcat部署war包

1.首先将咱们的web项目进行打包,打成一个war包&#xff1b; 2.将war包放置在webapps目录下&#xff0c;当tomcat启动运行时会将war包自动解压在当前文件夹&#xff0c;war包名称即为访问路径&#xff1b; 3.在conf目录下server.xml里可以设置tomcat访问端口&#xff0c;如果端口…

数字资产管理系统、企业数字资产管理软件

数字资产管理系统&#xff08;DAMS&#xff09;是一系列软件&#xff0c;它提供了一个开放平台&#xff0c;支持对多媒体数据的采集、创建、管理、存储、归档、检索、传输和显示。这些多媒体数据包括图像、视频、声音、文本和电影剪辑等。这些基础软件不仅是内容创作&#xff0…

使用React搭建single-spa

自己搭建的Demo GitHub - ftao123/single-spa-react-demo: single-spa-react-demo 修改子应用的webpack配置 library: "app2"和libraryTarget: "umd"配置必须添加。 可以看到filename在开发环境下的地址是static/js/bundle.js&#xff0c;所以我们主应用…

Java多线程自定义线程池——线程池的七大参数和四大拒绝策略

线程池 2.1 线程池思想 我们使用线程的时候就去创建一个线程&#xff0c;这样实现起来非常简便&#xff0c;但是就会有一个问题&#xff1a; 如果并发的线程数量很多&#xff0c;并且每个线程都是执行一个时间很短的任务就结束了&#xff0c;这样频繁创建线程就会大大降低系统…

Linux/Bizness

Enumeration nmap 用 nmap 扫描了常见的端口&#xff0c;发现对外开放了22,80,443 ┌──(kali㉿kali)-[~] └─$ nmap 10.10.11.252 Starting Nmap 7.93 ( https://nmap.org ) at 2024-03-08 01:21 EST Nmap scan report for 10.10.11.252 Host is up (0.36s latency). Not…

python 空间距离计算

目录 python 空间距离计算 已知两点&#xff0c;画三角形 批量矩阵计算 python 空间距离计算 要在空间中找到一个点&#xff0c;使其位于点 b 和 c 之间的连线上&#xff0c;并且与点 b 的距离等于点 a 到点 b 的距离的2倍。 import numpy as npif __name__ __main__:a …

MySQL下载安装和本地连接

1、下载MySQL 从MySQL官网下载MySQL Community Server版本&#xff1a; 下载地址&#xff1a;MySQL官网 1、进入官网&#xff0c;点击DOWNLOADS 2、点击MySQL Community(GPL)Downloads 3、点击MySQL Installer for Windows 4、这个会直接跳转到最新的版本 如果想下载以往的…

题目:笨笨机器人(蓝桥OJ 3262)

问题描述&#xff1a; 解题思路&#xff1a; 用n位二进制数每位来表示每一步的状态&#xff0c;2的n次幂即使全部可能。遍历计算全部符合题意总数&#xff0c;再用cnt/(2的n次幂&#xff09;即答案。 需要注意的是&#xff0c;四舍五入后四位的方法&#xff1a;round(),可以四舍…

计算机网络——数据链路层(数据链路层功能概述)

计算机网络——数据链路层&#xff08;数据链路层功能概述&#xff09; 数据链路层的功能数据链路层的基本概念封装成帧和透明传输 我们之前已经学完了物理层的所有内容&#xff0c;今天开始我们要进入数据链路层的学习&#xff0c;如果有小伙伴对物理层的内容感兴趣的话&#…

from_pretrained 做了啥

transformers的三个核心抽象类是Config, Tokenizer和Model&#xff0c;这些类根据模型种类的不同&#xff0c;派生出一系列的子类。构造这些派生类的对象也很简单&#xff0c;transformers为这三个类都提供了自动类型&#xff0c;即AutoConfig, AutoTokenizer和AutoModel。三个…

算法系列--动态规划--子序列(2)

&#x1f495;"你可以说我贱&#xff0c;但你不能说我的爱贱。"&#x1f495; 作者&#xff1a;Mylvzi 文章主要内容&#xff1a;算法系列–动态规划–子序列(2) 今天带来的是算法系列--动态规划--子序列(2),包含了关于子序列问题中较难的几道题目(尤其是通过二维状…

数据结构从入门到精通——快速排序

快速排序 前言一、快速排序的基本思想常见方式通用模块 二、快速排序的特性总结三、三种快速排序的动画展示四、hoare版本快速排序的代码展示普通版本优化版本为什么要优化快速排序代码三数取中法优化代码 五、挖坑法快速排序的代码展示六、前后指针快速排序的代码展示七、非递…