• 5817阅读
  • 5回复

主窗体不能被翻译,怎么解决? [复制链接]

上一主题 下一主题
离线lugaideath
 

只看楼主 倒序阅读 楼主  发表于: 2009-12-17
我在主窗体下定义了一个slot,用来加载和移除翻译的

myWidget::myWidget()
{
      .....
    myTra = new QTranslator(this);
    myTra.load(":/cn.ts");
    myTra_1 = new QTranslator(this);
    myTra_1.load(":/en.ts");
}

void myWidget::slotMyTra()
{
    if(.....)
    {
        qApp->installTranslator(myTra);
        qApp->removeTranslator(myTra_1);
    }
    else
    {
        qApp->installTranslator(myTra_1);
        qApp->removeTranslator(myTra);
    }
}


该功能,除了myWidget以外的所有窗体都被翻译了,只有myWidget没有被翻译,要怎么解决呢?
如果翻译写在main.cpp里面,myWidget是可以被翻译的。
离线dbzhang800

只看该作者 1楼 发表于: 2009-12-17
搞清一个概念:

如果你界面显示一个字符串
label-> setText(tr(“aaaaa”));
那么 执行这条语句时 你的翻译文件必须已经被加载了。

如果是动态加载翻译文件,每次加载后,你都要执行一次 setText
离线lugaideath

只看该作者 2楼 发表于: 2009-12-17
如果是MDI的情况,加载翻译文件后,子窗体字体会自动被翻译,可是主窗体就没有

每次切换翻译文件的时候都是子窗体字体被翻译,主窗体没有,子窗体跟主窗体都是显示着的。
离线lugaideath

只看该作者 3楼 发表于: 2009-12-17
解决了,在slot最后加一句ui->retranslateUi(this);
离线gh20091217
只看该作者 4楼 发表于: 2009-12-21
引用第1楼dbzhang800于2009-12-17 09:25发表的  :
搞清一个概念:
如果你界面显示一个字符串
label-> setText(tr(“aaaaa”));
那么 执行这条语句时 你的翻译文件必须已经被加载了。
.......

大侠的意思是说:
{
if(.....)
    {
        qApp->installTranslator(myTra);
    }
......
Qmenu *menu;
QAction delete = menu->addAction(tr("Delete"));
delete->setText(tr("Delete"))
}

是这个意思吗?
离线dbzhang800

只看该作者 5楼 发表于: 2009-12-21
引用第4楼gh20091217于2009-12-21 17:10发表的  :
大侠的意思是说:
{
if(.....)
    {
.......


大致这个样子了,

你可以把所有需要翻译的统一放到一个成员函数内,
加载新的 translator后,调用一次就好了,比如:

  1. void MainWindow::retranslateUi()
  2. {
  3.     openAction->setText(tr("&Open..."));
  4.     saveAction->setText(tr("Save"));
  5.     saveAsAction->setText(tr("Save As..."));
  6.    ...
  7.     fileMenu->setTitle(tr("&File"));
  8.     viewMenu->setTitle(tr("&View"));
  9.     toolMenu->setTitle(tr("&Tool"));
  10.    ....
  11.     ui->retranslateUi(this);
  12. }
快速回复
限100 字节
 
上一个 下一个