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:实现翻译效果

假设我的项目叫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

  • 10
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值