Qt中实现按键切换中英文

1.在.pro文件中添加

TRANSLATIONS = \

qt_cn.ts \ # 中文

qt_en.ts # 英文

2.ui中拖入控件,编译保存一下

3.右键工程,添加现有文件

4.加载翻译


//使用时将.qm文件拷贝到构建目录的debug/release目录下
QString strFile =QCoreApplication::applicationDirPath()+"/";
ch.load(strFile + "qt_cn.qm");
en.load(strFile + "qt_en.qm");

5.点击工具-外部-Qt语言家-更新翻译

6.选择中文的,用...打开,选择Qt Linguist

7.打开后直接默认确定

8.中文的直接就复制中文的进来,按照123步骤,保存后关闭

9.点击英文的,步骤同上,改成自己需要翻译成的东西,注意如果和原来格式不一样会有警告,比如多了一个空格

 10.关闭后点击工具-外部-Qt语言家-发布翻译

 11.两个按键分别控制切换中英文

void MainWindow::on_pushButton_clicked()
{
    qApp->installTranslator(&ch);
     ui->retranslateUi(this);
}

void MainWindow::on_pushButton_2_clicked()
{
    qApp->installTranslator(&en);
      ui->retranslateUi(this);
}

12.运行结果

中文:

英文:

13.注意的点

1.以上方法只适用于ui里面的控件,如果是用代码生成的则无效,如果想让代码生成的也生效的话只需要在设置字符串的时候加上tr后,保存文件,需要点击工具-外部-Qt语言家-更新翻译,然后再用Qt Linguist打开

例:

QMessageBox::information(nullptr,tr("DigisynLink"),tr("确定重启设备?"));
QPushButton *bt = new QPushButton();
bt->setText(tr("你好"));
2.在执行ui->retranslateUi(this);之后会将原本setText的文本清空了,如果不希望被清空需要重新设置数据
 ui->label->setText(tr("测试"));

 如果不重新设置则会清空

 重新设置后即可正常实现

void MainWindow::on_ChineseBt_clicked()
{
    qApp->installTranslator(&ch);
    ui->retranslateUi(this);
    ui->label->setText(tr("测试"));
}

void MainWindow::on_EnglishBt_clicked()
{
    qApp->installTranslator(&en);
    ui->retranslateUi(this);
    ui->label->setText(tr("测试"));
}

3.如果在mainwindow下使用了QStackWidget来创建多个界面,并且每个界面是分离出来管理的,以上步骤只能替换当前界面的中英文,如果想要实现全部替换,需要在每个页面里面重写event方法
bool MainWindow::event(QEvent *event)
{
    if(event->type() == QEvent::LanguageChange)
    {
         ui->retranslateUi(this);  // 更新界面的翻译 
    }
    return QWidget::event(event);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值