• 10694阅读
  • 13回复

[提问]Qt动态翻译,在其他成员函数当中,如果有label->setText(tr("共%1页").arg(m_iPage))的话,该怎么做呀! [复制链接]

上一主题 下一主题
离线ggkuroky
 
只看楼主 倒序阅读 楼主  发表于: 2012-10-20
— 本帖被 XChinux 从 其它技术开发讨论区 移动到本区(2012-10-20) —
关键词: 求助
我想把label的text在程序运行的时候动态的切换为英文版本,但是我的这个label是可以设置任何的页数的,也就是有一个按钮可以控制页数的变化,我想问一下,当我切换为英文版的时候,这个label为什么没有变为英文的呀,切换一次语言之后,如果按钮点击了10下,就共10种text的可能,这样的但是好像一直是中文的,即使我用Qt 语言家翻译了也没用呀,该怎么实现呢?
相信自己,天道酬勤!
离线alexltr

只看该作者 1楼 发表于: 2012-10-20
Re:Qt动态翻译,在其他成员函数当中,如果有label->setText(tr("共%1页").arg(m_iPage))的 ..
在Linguist里翻译成Total %1 Pages就ok了。
如果是动态切换,好像所有的tr()语句都要重新调用。C++ GUI 编程这本书里有例子。

但是我个人觉得,代码里还是用英文好,然后翻译成其它语言,如中文简体,繁体等,这样可以避免很多问题。而不是反过来在代码里用中文,然后翻译成英文。
我不从事IT,只是喜欢Qt。
我不是程序员,只是与程序有缘。
我写程序,只是为了让工作变得简单有序!

                      ----  一个一直在入门的编程学习者
离线ggkuroky
只看该作者 2楼 发表于: 2012-10-20
Re:Qt动态翻译,在其他成员函数当中,如果有label->setText(tr("共%1页").arg(m_iPage))的 ..
我是这样子做的,但是不是立刻给这个label设置text而是在某个按钮的槽函数里面设置的,意思就是我调用这个槽函数10次,每次设置都会显示为英文吗?但是好像切换为英文版了,但是点击按钮的时候显示的却是中文,为什么,如果给这个label设置别的比如 第几页,怎么办,一个label有两种文本,第几页和共几页 怎么翻译呀?
相信自己,天道酬勤!
离线ggkuroky
只看该作者 3楼 发表于: 2012-10-20
回 1楼(alexltr) 的帖子
Re:Qt动态翻译,在其他成员函数当中,如果有label->setText(tr("共%1页").arg(m_iPage))的 ..
我是这样子做的,但是不是立刻给这个label设置text而是在某个按钮的槽函数里面设置的,意思就是我调用这个槽函数10次,每次设置都会显示为英文吗?但是好像切换为英文版了,但是点击按钮的时候显示的却是中文,为什么,如果给这个label设置别的比如 第几页,怎么办,一个label有两种文本,第几页和共几页 怎么翻译呀?
相信自己,天道酬勤!
离线alexltr

只看该作者 4楼 发表于: 2012-10-20
Re:Qt动态翻译,在其他成员函数当中,如果有label->setText(tr("共%1页").arg(m_iPage))的 ..
Sorry,我真的不是很明白你对问题的描述。
我不从事IT,只是喜欢Qt。
我不是程序员,只是与程序有缘。
我写程序,只是为了让工作变得简单有序!

                      ----  一个一直在入门的编程学习者
离线jdwx

只看该作者 5楼 发表于: 2012-10-20
Re:Qt动态翻译,在其他成员函数当中,如果有label->setText(tr("共%1页").arg(m_iPage))的 ..
label->setText(tr("共%1页").arg(m_iPage))
改为:
label->setText(tr("total%1page").arg(m_iPage))
之后再去做翻译工作,基本原则就是代码里不应该有中文。
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线roywillow

只看该作者 6楼 发表于: 2012-10-20
Re:Qt动态翻译,在其他成员函数当中,如果有label->setText(tr("共%1页").arg(m_iPage))的 ..
说实话真心没看懂你问的问题的意思……
总之代码里不要用中文就是最简单的解决方法
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线ggkuroky
只看该作者 7楼 发表于: 2012-10-20
Re:Qt动态翻译,在其他成员函数当中,如果有label->setText(tr("共%1页").arg(m_iPage))的 ..
可是之前的工程没有考虑到国际化,界面都是中文的,想改已经来不及了,我写点代码,看能说明白不:

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow),
    m_plblPage(new QLabel),
    m_pbtnPage(new QPushButton)
{
    ui->setupUi(this);
    m_plblPage->setText(tr("共五页"));
   connect(m_pbtnPage,SIGNAL(clicked()),SLOT(Page()));
}

void MainWindow::Page()
{
    m_plblPage->setText(tr("第一页"));
}

void MainWindow::changeEvent(QEvent *_pevent)
{
   if(_pevent->type() == QEvent::LanguageChange)
   {
      这里是其他的label设置text的地方。
   label1->setText(tr("其他"));
      m_plblPage->setText(tr("第一页"));

      ............
   }
   return QWidget::changeEvent(_pevent);
}

上面代码当中同一个QLabel,m_plblPage有两种文本,共五页和第一页,这样的该如何翻译,
翻译器重新注册了之后,changeEvent被调用,所有的label重新设置text,但是m_plblPage是在槽函数里面才被设置text属性的,好像切换为英文版之后,点击按钮的时候,m_plblPage却一直是中文第一页呀!
相信自己,天道酬勤!
离线nlstone

只看该作者 8楼 发表于: 2012-10-22
Re:Qt动态翻译,在其他成员函数当中,如果有label->setText(tr("共%1页").arg(m_iPage))的 ..
每一个widget加一个translate函数,在改变语言以后调用一次,所有的tr()文本都在这里重新settext一次。
无我不能之事
无我不解之谜
无我不为之利
无我不胜之争
离线彩阳

只看该作者 9楼 发表于: 2012-10-22
Re:Qt动态翻译,在其他成员函数当中,如果有label->setText(tr("共%1页").arg(m_iPage))的 ..
我可以回答怎么翻译的:
第几页 共几页 可以翻译为
Page 1 of 1 或者干脆 Page 1/1,LibreOffice里面就是这么写的。
上海Qt开发联盟,热忱地欢迎你的加入!
离线ggkuroky
只看该作者 10楼 发表于: 2012-10-22
Re:Qt动态翻译,在其他成员函数当中,如果有label->setText(tr("共%1页").arg(m_iPage))的 ..
我终于自己研究出来了,         
原来动态注册的翻译器,是在一个函数里面构造的,如下
void MyWidget::LanguageChanged(int  _iLanguage)
{

     QTranslator translator;
     translator.load("english.qm");
     app.installTranslator(&translator);

}
相信自己,天道酬勤!
离线ggkuroky
只看该作者 11楼 发表于: 2012-10-22
Re:Qt动态翻译,在其他成员函数当中,如果有label->setText(tr("共%1页").arg(m_iPage))的 ..
我终于自己研究出来了,          
原来动态注册的翻译器,是在一个函数里面构造的,如下
void MyWidget::LanguageChanged(int  _iLanguage)
{
     if(0 == _iLanguage)
      {
          QTranslator translator;
         translator.load("english.qm");
         app.installTranslator(&translator);
}
else
{


}

}
相信自己,天道酬勤!
离线ggkuroky
只看该作者 12楼 发表于: 2012-10-22
Re:Qt动态翻译,在其他成员函数当中,如果有label->setText(tr("共%1页").arg(m_iPage))的 ..
//我终于自己研究出来了,
//原来动态注册的翻译器,是在一个函数里面构造的,如下
void MyWidget::LanguageChanged(int  _iLanguage)
{
    QTranslator translator;
    if(0 == _iLanguage)
    {
        translator.load("english.qm");
    }
    else
    {
        translator.load("chinese.qm");
    }
    app.installTranslator(&translator);
}
这样子构造的translator是局部的,函数结束之后,就销毁了,所以在其他函数里面对label设置text属性的时候就无法完成想要的英文效果了,修改方法,用new的就可以了,这样可以保证在注册完翻译器之后,下次重新注册之前,的任何地方,都可以调用setText等方法,都会进行翻译操作的,另外一个label有两种文本的可以这样子做:
label->setText(tr("局部的","first"));
label->setText(tr("函数结束","second"));
这样Qt linguist会两个都提取,对两个分别翻译自己想要的内容就ok了,第二个参数可以随便写,只要不相同就可以了,意思是用来区分label的内容的!

靠!!为什么点了空格,就发布出去了!!!
相信自己,天道酬勤!
离线ggkuroky
只看该作者 13楼 发表于: 2012-10-23
Re:Qt动态翻译,在其他成员函数当中,如果有label->setText(tr("共%1页").arg(m_iPage))的 ..
我靠,还不能每次都new,搞成成员变量就ok了,在构造函数里new一次,就ok!
相信自己,天道酬勤!
快速回复
限100 字节
 
上一个 下一个