qt5-入门-国际化

news2024/11/13 9:31:56

参考:
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.coloradmin.cn/o/1533366.html

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

相关文章

Mysql总结(附思维导图)

Mysql Mysql索引 使用 创建主键索引 在对应字段后指定primary_key&#xff1a;id int primary key 创建唯一索引 在对应字段后指定unique_key&#xff1a;name varchar(20) unique 创建普通索引 在创建表的最后&#xff0c;指定某列或某几列&#xff1a;index(name) 创建全…

vue前端解析jwt

vue前端解析jwt 我们可以用在线解析看解析的结果&#xff1a;https://www.lddgo.net/encrypt/jwt-decrypt 但是如果在前端需要解析token&#xff0c;拿到其中的权限信息&#xff0c;可以这样解决。 在线的&#xff1a; 完美解决&#xff1a; 代码&#xff1a; function par…

(MYSQL)数据库中排序与分页操作

排序&#xff1a; 使用ODER BY 语句&#xff08;在select语句的末尾&#xff09;进行排序其中&#xff1a; 加ASC 升序&#xff1b; 加DESC 降序&#xff1b; 排序举例&#xff1a; SELECT id,name,salary FROM employees ORDER BY id; 注&#xff1a;此时就是以id升序排列表…

【Flutter学习笔记】9.7 动画过渡组件

参考资料&#xff1a;《Flutter实战第二版》9.7 动画过渡组件 “动画过渡组件”指的是在Widget属性发生变化时会执行过渡动画的组件&#xff0c;其最明显的一个特征就是会在内部管理一个AnimationController。controller定义了过渡动画的时长&#xff0c;而animation对象的定义…

Hutool中的这些工具类,太实用了

前言 今天给大家介绍一个能够帮助大家提升开发效率的开源工具包:hutool。 Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,使Java拥有函数式语言般的优雅,让Java语言也可以“甜甜的”。 Hutool的设计思想是尽量减少重复的定义…

SAP PM 维护计划参数详解

本文的主要目的是解释调度参数如何影响预防性维护中计划日期的计算——基于时 间的单周期计划。 调度参数&#xff1a; 我们直接在维护计划中维护单周期计划的调度参数&#xff0c;如下图 计划标识 是计算计划日期的依据&#xff1a; 时间&#xff1a; 月份的计算基础始终…

成为高效Java工程师的干货笔记

&#x1f482; 个人网站:【 摸鱼游戏】【神级代码资源网站】【工具大全】&#x1f91f; 基于Web端打造的&#xff1a;&#x1f449;轻量化工具创作平台&#x1f485; 想寻找共同学习交流&#xff0c;摸鱼划水的小伙伴&#xff0c;请点击【全栈技术交流群】 作为一名Java工程师&…

CSS字体图标

文章目录 1. 概念2. 阿里图标 iconfont2.1. 网址2.2. 使用方法2.3. 注意事项2.3.1. 原因 3. font-awesome 图标3.1. 网址3.2. 使用方法 1. 概念 本质就是一个字体&#xff0c;可以灵活修改它的样式&#xff0c;降低服务器请求的次数&#xff0c;同时相比图片更加清晰。 2. 阿…

IBM:《CEO生成式 AI行动指南利用生成式 AI推动变革--所需了解的事项和所需采取的行动》

2024年2月IBM分享《CEO生成式 AI行动指南利用生成式 AI推动变革》报告。在该报告中&#xff0c;讨论了成功转型所必不可少的基本领导素质&#xff0c;并展示了如何将这些技能应用于培养 AI 赋能的人才、发展 AI 赋能的业务&#xff0c;以及利用 AI 赋能的数据与技术。 报告提到…

【环境搭建和安装】thingsboard二次开发环境搭建

文章目录 1.安装JAVA2.安装maven环境3.安装nodeJS4.安装git环境5.安装npm依赖关系 提示&#xff1a; 1.我自己下载存放路径比较混乱&#xff0c;下载的文件尽量在一个新建的文件夹存放&#xff0c;目录全英更好。 2.环境是为了开源物联网平台&#xff0c;环境搭建和安装部署是成…

力扣刷题Days20-151. 反转字符串中的单词(js)

目录 1,题目 2&#xff0c;代码 1&#xff0c;利用js函数 2&#xff0c;双指针 3&#xff0c;双指针加队列 3&#xff0c;学习与总结 1&#xff0c;正则表达式 / \s /&#xff1a; 2&#xff0c;结合使用 split 和正则表达式&#xff1a; 1,题目 给你一个字符串 s &am…

【数据集】全球土地利用数据集:GRIPCmap

GRIPCmap数据概述 GRIPC&#xff08;Global rain-fed, irrigated, and paddy croplands&#xff09;论文介绍数据下载 参考 GRIPC&#xff08;Global rain-fed, irrigated, and paddy croplands&#xff09; 论文介绍 数据下载 下载地址-Index of /public/friedl/GRIPCmap/ …

mysql面试题以及答案

1 基础 1.1、MySQL有哪些数据库类型&#xff1f; 数值类型 有包括 TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT&#xff0c;分别表示 1 字节、2 字节、3 字节、4 字节、8 字节的整数类型。 1&#xff09;任何整数类型都可以加上 UNSIGNED 属性&#xff0c;表示无符号整数。 …

做外贸soho 是最好的选择吗

前几日&#xff0c;见到一个创业的朋友又去找了一个单位上班&#xff0c;询问其原因&#xff0c;对方说不是没有客户&#xff0c;也不是没有回头客。 只是比起创业更重要的是一家老小的生存问题&#xff0c;他说家里有两个要吃奶粉的孩子&#xff0c;老婆也不能上班&#xff0…

【pycharm】作为Array查看出现数据无法显示问题(已解决)

【pycharm】作为Array查看出现数据无法显示问题&#xff08;已解决&#xff09; 当我们在调试代码的时候&#xff0c;需要对某个变量进行查看&#xff0c;就如同在matlab中&#xff0c;我们可以直接在工作区对某个变量进行双击查看矩阵变量的具体数值 在这里我遇到一个问题&am…

第十二届蓝桥杯省赛CC++ 研究生组-货物摆放

还是整数分解问题,注意n本身也是约数 #include <iostream> int main(){printf("2430");return 0; }#include <iostream> #include<cmath> #include<algorithm> using namespace std; typedef long long ll; const ll n 2021041820210418LL…

深度学习之本地部署大模型ChatGLM3-6B【大模型】【报错】

文章目录 0.前言1.模型下载2.配置环境2.1 下载项目文件2.2 配置环境 3.开始推理4.总结 0.前言 本博客将介绍ChatGLM3-6B大模型在Ubuntu上的本地部署教程 1.模型下载 由于毛毛张的服务器服务无法科学上网&#xff0c;所以模型的相关文件必须现在本地下载好&#xff0c;再上传到…

混合电压供电系统 3V/5V 器件 I/O 口互连

混合电压供电系统 3V/5V 器件 I/O 口互连

五、分支结构

一、程序的组织结构 无论程序是大是小&#xff0c;都可以用顺序结构、选择结构和循环结构表示 二、单分支结构 单分支结构&#xff1a;如果表达式的值是True就执行代码&#xff0c;如果表达式的值是False就跳过语句执行后面语句 ageint(input(请输入你的年龄&#xff1a;)) i…