QT 中英文切换-国际化(解决部分翻译不起作用的问题)

本文详细介绍了QT应用程序进行国际化操作的步骤,包括配置.pro文件、构造函数的编写、按钮点击事件处理以及翻译文件的生成和配置。通过加载不同的qm文件,实现了在运行时动态切换中英文界面。同时,提供了Linguist工具进行翻译和生成qm文件的方法。
该文章已生成可运行项目,

1.先看效果

在这里插入图片描述

2.核心代码(重新赋值刷新翻译文本)

2.0 pro文件配置

TRANSLATIONS = \
            qt_cn.ts \  # 中文
            qt_en.ts    # 英文

2.1 构造函数

	qtr = new QTranslator;  // .h中的变量 这里初始化分配内存
	ui->comboBox->setEditable(true);                         // 不使能无法设置 且程序会异常结束
    ui->comboBox->lineEdit()->setAlignment(Qt::AlignCenter); // 居中
    ui->comboBox->lineEdit()->setReadOnly(true);             // 只读 不可编辑
    ui->comboBox->addItem(tr("I am a comboBox")); // combobox文本
    ui->lineEdit->setText(tr("I am a lineEdit")); // lineEdit文本
    // 下拉框 第一行居中
    static_cast<QStandardItemModel*>(ui->comboBox->view()->model())->item(0,0)->setTextAlignment(Qt::AlignCenter);

2.2 两个按钮点击事件

void MainWindow::on_pushButton_clicked()
{
    if(this->qtr->load(qApp->applicationDirPath()+"/qt_cn.qm")){
        qApp->installTranslator(qtr);
        ui->retranslateUi(this);
        qDebug()<< QStringLiteral("切换中文");
        // 加载完翻译文件后 这里需要重新赋值 刷新文本信息
        ui->lineEdit->setText(tr("I am a lineEdit"));
        ui->comboBox->removeItem(ui->comboBox->currentIndex());
        ui->comboBox->addItem(tr("I am a comboBox"));
    }

}

void MainWindow::on_pushButton_2_clicked()
{
    if(this->qtr->load(qApp->applicationDirPath()+"/qt_en.qm")){
        qApp->installTranslator(qtr);
        ui->retranslateUi(this);
        qDebug()<< QStringLiteral("切换英文");
        // 加载完翻译文件后 这里需要重新赋值 刷新文本信息
        ui->lineEdit->setText(tr("I am a lineEdit"));
        ui->comboBox->removeItem(ui->comboBox->currentIndex());
        ui->comboBox->addItem(tr("I am a comboBox"));
    }

}

3.翻译文件的生成与配置

  1. 写好代码后( tr(需要翻译的文本)-ui界面的文本默认可翻译 )
  2. 点击工具栏 - 外部 - qt语言家 - 更新翻译 生成ts文件
    在这里插入图片描述
  3. 使用Linguist打开生成的ts文件,一行行翻译 or 直接修改ts文件亦可
    在这里插入图片描述
  4. 使用Linguist:文件 - 发布 或者 Creator:工具栏 - 外部 - qt语言家 - 更新翻译 生成qm文件,程序中加载相应qm文件即可

4. 参考链接

  • https://blog.csdn.net/qq_41927737/article/details/106746595 —QT国际化发现的问题
  • https://blog.csdn.net/dutchlight/article/details/108346832 —qt部分字符串无法翻译原因记录
  • http://blog.chinaunix.net/uid-20676637-id-86140.html —QT学习笔记(二): QT国际化, 运行时改变界面语言, 利用QT实现国际化应用程序
  • https://blog.csdn.net/li1123576747/article/details/109386897 —Qt国际化之tr()在自定义类中翻译无效的问题
本文章已经生成可运行项目
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

das白

感谢认可!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值