QT翻译总结

本文详细介绍了在Qt环境中进行应用程序国际化翻译的步骤,包括使用tr函数包裹文本,定义翻译函数,处理语言变更事件,加载qm文件,以及解决翻译不生效的常见问题。还特别提到了dialogbuttonbox中的按钮翻译和QString内容的翻译方法,提供了翻译教程和关键点总结。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

翻译问题总结

1)用tr包裹要翻译的文本信息
2)要准备翻译的所有控件的函数;这里我就以FunSetText()函数为例子,这个FunSetText()函数装了所有我需要翻译的文本内容。

//这个函数有所有我需要设置文本的控件
void FunSetText()
{
	ui->pushbutton->setText(tr("Hello"));
}

3)changeEvent事件

protected:
void changeEvent(QEvent *event);
void MainWindow::changeEvent(QEvent *event)
{
    switch (event->type())
    {
        case QEvent::LanguageChange:
            FunSetText();  //触发语言切换事件的时候就会调用FunSetText()这个函数,你所有需要翻译的文本信息就要被刷新一便
            break;
        default:
            QWidget::changeEvent(event);
    }
}

4)加载qm文件

	connect(mpLanguageEnglish, &QAction::triggered,this,[=]()
    {
    //英文的qm文件
        mTranslator.load(":/English.qm");
        qApp->installTranslator(&mTranslator);
    });
    connect(mpLanguageChinese, &QAction::triggered,this,[=]()
    {
    //中文的qm文件
        mTranslator.load(":/Chinese.qm");
        qApp->installTranslator(&mTranslator);
     });

5)ui界面需要翻译

void FunSetText()
{
	//首先翻译ui中的内容,再翻译你需要翻译的控件的文本信息,如果你的ui界面没有或者不需要翻译就大可不必调用这个函数
	ui->retranslateUi(this);
	
	//用户自己定义的控件信息翻译
	ui->pushbutton->setText(tr("Hello"));
}

6)文本信息没有翻译
①控件信息没有用tr包裹
②ui->retranslateUi(this);没有放到最前面,导致设置文本信息被清空
③没有调用翻译函数FunSetText()
④类中没有添加Q_OBJECT
⑤重建更新翻译,再次发布生成qm文件
⑥没有加载qm文件

7)dialogbuttonbox中的OK和Cancel按钮翻译(可能没用)

void FunSetText()
{
	//分别给OK和Cancel按钮设置文本信息
	ui->buttonBox->button(QDialogButtonBox::Ok)->setText(tr("123"));
    ui->buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("456"));
}
void MainWindow::changeEvent(QEvent *event)
{
    switch (event->type())
    {
        case QEvent::LanguageChange:
            FunetText(); 
            break;
            //多了这个判断,因为当时我的dialogbuttonbox中设置的文本信息被清空		的时候我发现他调用了这个函数,然后我就加了这个函数。
            //在公司的项目中我这样做是可以翻译按键的OK和Cancel,如果这样不行我就没有办法了
        case QEvent::ActivationChange:
              FunSetText();

        default:
            QWidget::changeEvent(event);
    }
}

8)QString内容翻译

//text2是我想要翻译的内容
QByteArray mByteInfo = text2.toLatin1();
const char *mChInfo = mByteInfo.data();
QString Info = text2.toLocal8Bit();
ui->textEdit->append(tr(mChInfo)); //mChInfo是转换好的内容

翻译教程

翻译
有任何不懂的可以私聊我,毕竟有些翻译的工作是我比较早写的,可能当时也遇到了一些问题,可以和我一起了解一下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值