一般情况下,需要翻译的内容处于UI相关的控件上,使用Qt提供的内置控件时,可以通过Qt Lingust直接再Widget相关的类中翻译;

如果有自定义控件,且控件中有需要翻译的内容的情形的处理:

1、显示添加翻译相关的代码;

2、将自定义控件写成插件,利用内置控件相同的机制来进行翻译;

代码

main.cpp

#include "QtVSMultiLanguage.h"
#include <QtWidgets/QApplication>
#include "Linguist.h"int main(int argc, char *argv[])
{QApplication a(argc, argv);CLinguist* lin = CLinguist::GetLinguistInstance();lin->ChangeLanguage(Language::zh_cn);QtVSMultiLanguage w;w.show();return a.exec();
}

Linguist.h

// Linguist.h
#pragma once
/*
语言家,配置当前系统的语言
*/#include <QObject>
#include <qtranslator.h>enum Language
{zh_cn,en_us,undefined
};class CLinguist :public QObject
{Q_OBJECT
private:CLinguist();public:// 当前语言 简体中文、英文、未定义Language m_CurrentLanguage = Language::undefined;// 切换语言void ChangeLanguage(Language lan);static  CLinguist * GetLinguistInstance();
private:static CLinguist * linguist;QTranslator * m_trans;
signals:// 语言切换信号,通知当前系统语言已经被切换void LanguageChaned();
};

Linguist.cpp


#include "Linguist.h"
#include <QtCore/QCoreApplication>CLinguist * CLinguist::linguist = nullptr;
CLinguist::CLinguist() :m_trans(new QTranslator)
{
}CLinguist * CLinguist::GetLinguistInstance()
{if (nullptr == linguist){linguist = new CLinguist;}return linguist;
}void CLinguist::ChangeLanguage(Language lan)
{if (lan == this->m_CurrentLanguage || lan == Language::undefined) return;bool ret;switch (lan){case zh_cn:if (nullptr != m_trans){qApp->removeTranslator(m_trans);}ret = m_trans->load("qtvsmultilanguage_zh.qm");if (ret){qApp->installTranslator(m_trans);}break;case en_us:if (nullptr != m_trans){qApp->removeTranslator(m_trans);}ret = m_trans->load("qtvsmultilanguage_en.qm");if (ret){qApp->installTranslator(m_trans);}break;default:break;}if (ret){this->m_CurrentLanguage = lan;// 发出语言被切换的信号emit LanguageChaned();}
}

QtVSMultiLanguage.ui

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0"><class>QtVSMultiLanguageClass</class><widget class="QMainWindow" name="QtVSMultiLanguageClass"><property name="geometry"><rect><x>0</x><y>0</y><width>653</width><height>416</height></rect></property><property name="windowTitle"><string>QtVSMultiLanguage</string></property><widget class="QWidget" name="centralWidget"><widget class="QWidget" name="layoutWidget"><property name="geometry"><rect><x>50</x><y>20</y><width>354</width><height>185</height></rect></property><layout class="QVBoxLayout" name="verticalLayout"><item><layout class="QHBoxLayout" name="horizontalLayout"><item><widget class="QLabel" name="UserNameLabel"><property name="text"><string>UserName:</string></property></widget></item><item><spacer name="horizontalSpacer"><property name="orientation"><enum>Qt::Horizontal</enum></property><property name="sizeHint" stdset="0"><size><width>28</width><height>20</height></size></property></spacer></item><item><widget class="QTextEdit" name="UserNametextEdit"/></item></layout></item><item><layout class="QHBoxLayout" name="horizontalLayout_2"><item><widget class="QLabel" name="PassWordLabel"><property name="text"><string>PassWord:</string></property></widget></item><item><spacer name="horizontalSpacer_2"><property name="orientation"><enum>Qt::Horizontal</enum></property><property name="sizeHint" stdset="0"><size><width>28</width><height>20</height></size></property></spacer></item><item><widget class="QTextEdit" name="PassWordtextEdit"/></item></layout></item><item><layout class="QHBoxLayout" name="horizontalLayout_3"><item><widget class="QPushButton" name="SwitchpushButton"><property name="text"><string>SwitchLanguage</string></property></widget></item><item><spacer name="horizontalSpacer_3"><property name="orientation"><enum>Qt::Horizontal</enum></property><property name="sizeHint" stdset="0"><size><width>40</width><height>20</height></size></property></spacer></item><item><widget class="QPushButton" name="LoginpushButton"><property name="text"><string>Login</string></property></widget></item><item><spacer name="horizontalSpacer_4"><property name="orientation"><enum>Qt::Horizontal</enum></property><property name="sizeHint" stdset="0"><size><width>40</width><height>20</height></size></property></spacer></item><item><widget class="QPushButton" name="CancelpushButton"><property name="text"><string>Cancel</string></property></widget></item></layout></item></layout></widget><widget class="ForceLinePointWidget" name="PointInfoWidget"><property name="geometry"><rect><x>90</x><y>250</y><width>440</width><height>40</height></rect></property><property name="toolTip"><string>The current time</string></property><property name="whatsThis"><string>The analog clock widget displays the current time.</string></property><property name="pointName"><string>FemurHeadCenter</string></property></widget></widget><widget class="QMenuBar" name="menuBar"><property name="geometry"><rect><x>0</x><y>0</y><width>653</width><height>23</height></rect></property></widget><widget class="QToolBar" name="mainToolBar"><attribute name="toolBarArea"><enum>TopToolBarArea</enum></attribute><attribute name="toolBarBreak"><bool>false</bool></attribute></widget><widget class="QStatusBar" name="statusBar"/></widget><layoutdefault spacing="6" margin="11"/><customwidgets><customwidget><class>ForceLinePointWidget</class><extends>QWidget</extends><header>ForceLinePointWidget.h</header></customwidget></customwidgets><resources><include location="QtVSMultiLanguage.qrc"/></resources><connections/>
</ui>

https://gitee.com/beibeix/qt-samples/tree/master/QtVSMultiLanguage

结果

Qt的多语言功能模块Linguist的VS样例程序相关推荐

  1. 【QT 5 设置自定义标题栏+学习:《QT实现鼠标拖动调整窗口大小》+基础样例】

    [QT 5 设置自定义标题栏+学习:<QT实现鼠标拖动调整窗口大小>+基础样例] 1.说明 2.实验环境 3.实验目的 4.参考文章 5.实验步骤 (1)下载代码,运行没有错误. (2)加 ...

  2. Qt Creator将QML模块与插件一起使用

    Qt Creator将QML模块与插件一起使用 将QML模块与插件一起使用 注册QML类型 导入QML模块 在设计模式下运行QML模块 将QML模块与插件一起使用 QML模块可以使用插件将C ++中定 ...

  3. SAP MM 模块调研问卷样例

    SAP MM模块调研问卷样例 此问卷的目的是了解客户管理的现状以及管理水平,发现其中的问题及需改进之处,了解企业对现时管理咨询的需求,通过问卷的评估,对目前管理各方面作出描述,对客户需求作出分析,从而 ...

  4. boost::signals2模块连接扩展槽的示例程序,使用信号的 connect_extended 和 extended_slot_type

    boost::signals2模块连接扩展槽的示例程序,使用信号的 connect_extended 和 extended_slot_type 实现功能 C++实现代码 实现功能 boost::sig ...

  5. boost::container模块实现虚拟测试分配器的程序

    boost::container模块实现虚拟测试分配器的程序 实现功能 C++实现代码 实现功能 boost::container模块实现虚拟测试分配器的程序 C++实现代码 #ifndef BOOS ...

  6. Qt图形界面编程入门(创建一个简单的程序)

    1,手工编码方式 利用手工编码方式建立"Hello Qt!"程序 第一步: 得到界面 2,无UI的向导方式 从图中,我们发现向导为窗口程序提供了3个基类,分别外QMainWindo ...

  7. Android逆向之玩转Xposed模块以劫持登录为例(实战篇)

    上一篇文章<Android逆向之玩转Xposed模块以劫持登录为例(Demo篇)>自编自导了一款劫持登录的Xposed模块,如果仅满于破解自己的APP是多么的悲哀,毕竟市场上的app都是经 ...

  8. java毕业设计——基于java+JSP+sqlserver的Smart系统-题库及试卷管理模块设计与实现(毕业论文+程序源码)——学生信息管理系统模板2

    基于java+JSP+sqlserver的Smart系统-题库及试卷管理模块设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于java+JSP+sqlserver的Smart系统-题库及试卷 ...

  9. (已更新)【小程序模板】功能模块+验证码页面模板+实用的小程序前端模板

    源码简介与安装说明: 分享三个实用的验证码界面页面,弹出窗口,字母和数字接收验证码输入页面小程序模板 小程序源码下载地址:(已更新)[小程序模板]功能模块+验证码页面模板+实用的小程序前端模板-小程序 ...

最新文章

  1. Linux基础(二)--基础的命令ls和date的详细用法
  2. Reverse Linked List(leetcode206)
  3. 使用c语言标准库中的时间函数
  4. 零基础Java学习之初始化块
  5. Ubuntu系统显卡驱动、CUDA、CUDNN安装(一显卡驱动)
  6. Eclipse中使用Junit编写测试用例
  7. Rancher 2.0集群与工作负载告警
  8. 飞机大战小游戏3.0
  9. java基础回顾(一)—— sleep和wait的区别
  10. 百万级数据库优化方案大全
  11. Word中硬回车与软回车的区别和用法
  12. 考勤记录查询java_kaoqin 一个员工考勤软件,用java和sql写的,实现基本的签到和查询功能 Develop 238万源代码下载- www.pudn.com...
  13. 软件测试需要学数学,现在才开始学软件测试还有前途吗?
  14. Java程序员未来职业应如何规划?
  15. Mysql索引:图文并茂,深入探究索引的原理和使用
  16. java安装 2203_高手分析win7系统无法安装java程序提示“内部错误2203”的处理
  17. 首次试水天池数据大赛——7个小时玩了把美年健康AI大赛
  18. pdfjs 浏览器打印字体模糊问题
  19. Dota2预测英雄死亡
  20. 25万的特斯拉会动了谁的奶酪?

热门文章

  1. 《西虹市首富》文章相关代码分享
  2. U盘mp3移动硬盘“文件或目录损坏且无法读取”错误的修复
  3. 计算机表格怎么求面积,Excel怎么计算动态面积
  4. Centos 忘记root密码怎么办?
  5. Sublime Text3 常用快捷键
  6. nui-app vue.js项目实战---微信小程序
  7. 编程语言python用什么笔记本最好_这六种编程语言最适合初学者学习 不骗你!...
  8. 用Multisim分析二阶低通滤波器电路
  9. 智慧社区安防系统解决方案
  10. 图片涂鸦html插件,JS 网页截图、涂鸦