网站项目计划书,什么是互联网,智能建造就业方向及前景,资讯类网站怎么做文章目录 1、概要2、多语言切换2.1、结果展示2.2、创建项目2.2、绘制UI2.2、生成“.st”文件2.4、生成“.qm”文件2.5、工程demo 1、概要 借助QT自带的翻译功能#xff0c;实现实际应用用进行 “多语言切换”
2、多语言切换
2.1、结果展示 多语言切换 2.2、创建项目
1、文件… 文章目录 1、概要2、多语言切换2.1、结果展示2.2、创建项目2.2、绘制UI2.2、生成“.st”文件2.4、生成“.qm”文件2.5、工程demo 1、概要 借助QT自带的翻译功能实现实际应用用进行 “多语言切换”
2、多语言切换
2.1、结果展示 多语言切换 2.2、创建项目
1、文件,创建“新项目”————》“Application”————》“Qt Widgets Application”;
2、......2.2、绘制UI
1、菜单栏创建“QMenu”模拟正常软件控件布局
2、QMenu直接双击输入对应的命名昵称按键盘“Enter”键才会生效有点bug哈
3、创建QMenu下的QAction时命名需要复制粘贴进去再“Enter”键直接输入不生效
4、简单拖入两个QLable按钮便于直观看到效果2.2、生成“.st”文件 1、在.pro工程目录下手动创建“translate”文件夹用于存放需要添加的语种的.ts文件
//注意这里的.ts文件名称是你自己命名的自己记住那个语言对应哪个文件即可一般习惯上使用各语种的简写后续载入对应的qm语言文件做到对应正确就行。
//当前因为选中语种为“中文、英文、日语”故命名如下所示
TRANSLATIONS \translate/LanguageTest_cn.ts\translate/LanguageTest_en.ts\translate/LanguageTest_jp.ts2、在QT菜单栏选中“工具”——》选中“外部”——》选中“QT语言家”——》单机“lupdate”工具
2.4、生成“.qm”文件
1、找到安装目录下“bin”文件中的“linguist.exe”工具
2、 双击“linguist.exe”工具将QT生成的“.ts”文件拖入其中
3、根据需要进行对应的翻译直达所有的控件皆翻译完成如下图所示
4、单机“linguist.exe”菜单栏中的“文件”选择“保存”并“全部另存为”2.5、工程demo
//main.cpp
#include mainwindow.h
#include QApplication
int main(int argc, char *argv[]){QApplication a(argc, argv);MainWindow w;w.show();return a.exec();
}//mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include QMainWindow
#include QString
#include QDebug
#include QApplication
#include QTranslator
#include QFileInfoQT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECT
public:MainWindow(QWidget *parent nullptr);~MainWindow();private slots:void onMenulanguageTriggered(QAction *action); //UI按钮触发切换翻译void onLanguageTrans(int index); //加载翻译的.qm文件private:Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H//mainwindow.cpp
#include mainwindow.h
#include ui_mainwindow.hMainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui-setupUi(this);connect(ui-menu_language, QMenu::triggered, [](QAction *action) {onMenulanguageTriggered(action);}); //UI切换按钮就直接触发“onMenulanguageTriggered()”函数,获取QMenu当前被选中的QAction
}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::onLanguageTrans(int index)
{static QTranslator* translator; //初始化QT自带的翻译类“QThranslator”if(translator!NULL){qApp-removeTranslator(translator);delete translator;translatorNULL;}translatornew QTranslator();QString strLanguagePath;switch (index) {case 1:// chinesestrLanguagePath QCoreApplication::applicationDirPath() /translate/ LanguageTest_cn.qm;break;case 2:// EnglishstrLanguagePath QCoreApplication::applicationDirPath() /translate/ LanguageTest_en.qm;break;case 3://jpstrLanguagePath QCoreApplication::applicationDirPath() /translate/ LanguageTest_jp.qm;break;}if(translator-load(strLanguagePath)) //判断.qm文件是否加载成功{qApp-installTranslator(translator);//用于将指定的翻译器安装到应用程序中。安装后应用程序在显示文本时会优先使用该翻译器提供的翻译文本。this-ui-retranslateUi(this);//用于重新翻译当前界面上的所有控件文本。当翻译器安装成功后调用这个函数可以使界面上的文本立即更新为新的翻译内容。}else{qDebug()load failed;}
}void MainWindow::onMenulanguageTriggered(QAction *action)
{//刷新语言// 获取菜单中所有动作的列表QListQAction * actionList ui-menu_language-actions();// 查找触发动作在列表中的索引int index actionList.indexOf(action);if (index ! -1){onLanguageTrans(index);qDebug() Triggered action index: index;} else{qDebug() Action not found in menu.;}
}