新手求助:Qt多语言切换部分文字没有实现切换,在线等,急!

梦醒叹几重变迁 2017-02-23 03:21:00
如题,小弟是个刚入门的Qt小菜鸟,自己写了一个小程序实现界面文字的多国语言切换,程序运行成果如下:


如上面两幅图所显示的,点击界面右侧的“英语/中文”按键,界面会自动将文字转换成对应的语言,但是有部分文字没有实现文字转换,本人采用的是动态加载语言包.qm的方式完成切换,但是不能完成完全切换,求大神们解答。
以下给出代码图:




代码如上,没能实现切换的文本都是存在于setText里面的tr()字符,在翻译家内能提取并且翻译,但是在动态切换时无法做到

在ui界面中添加的Label字符能提取翻译并且能够动态切换。
问题至此,求各位大神解答
...全文
1605 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
指舞花歌 2019-12-03
  • 打赏
  • 举报
回复 1
引用 3 楼 zarelaky 的回复:
把MainWindow构造里面的一堆setText(tr())操作放到retranslate()函数里面,在构造最后一步调用retranslate()函数
qt语言翻译过程一般如下
installlTranslater() -> changeEvent(QEvent::LanguageEvent) -> retranslate()/retranslateUI(),
所以必须保证changeEvent(QtEvent::LanguageEvent)调用时所有带tr()函数的setText被调用一次才能完成界面控件语言的切换,tr()会根据输入文本查找translater中对应的内容进行转换,然后setText给控件才会使界面语言翻译生效。
牛逼 老铁
zarelaky 2018-12-05
  • 打赏
  • 举报
回复 1
把MainWindow构造里面的一堆setText(tr())操作放到retranslate()函数里面,在构造最后一步调用retranslate()函数
qt语言翻译过程一般如下
installlTranslater() -> changeEvent(QEvent::LanguageEvent) -> retranslate()/retranslateUI(),
所以必须保证changeEvent(QtEvent::LanguageEvent)调用时所有带tr()函数的setText被调用一次才能完成界面控件语言的切换,tr()会根据输入文本查找translater中对应的内容进行转换,然后setText给控件才会使界面语言翻译生效。


星云智能 2018-11-30
  • 打赏
  • 举报
回复
A non-translated text in Qt GUI is often caused by a bad order in your code.

I suggest you to read the content of Ui::retranslateUi() method. You will see many code like:

button->setText(QApplication::translate("MainWindow", "Import", 0));
The retranslateUi metod is generated for you when compiling a *.ui file, but it is only a list of calls to setText(), setToolTip() or another setXXX() methods on widgets you defined in the ui file. When a setText() method is called (for example), the parameter must be tr("my text"), this tr() is replaced by the corresponding translation at the moment you call it. So you should check if when you initialize your table widget item, your Translator has correctly been installed.

For example, if you create your item in the MainWindow constructor and if you have a main function like:

int main(int argc, char *argv[])
{
QApplication app(argc, argv);

MainWindow w;

QTranslator Translator ;
qDebug()<<"Translator->load( lang)"<< Translator.load(":/"+language);
app.installTranslator( &Translator );

w.show();

return app.exec();
}
it will not work, because the translator is installed after MainWindow constructor call, so when the item is initialized, the translator is not set.

To find the issue in your case, I suggest you to put qDebug() calls at some point to check the order of the calls.
  • 打赏
  • 举报
回复
我也才学QT,加关注一起学习哦。

5,530

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 模式及实现
社区管理员
  • 模式及实现社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧