QT封装的dll如何国际化

^卿^ 2016-11-09 06:10:57
qt的exe程序国际化一般在main里面直接
QTranslator *we=new QTranslator;
we->load("C:/Users/QGM/Desktop/dialog/gjh2/cn.qm")
a.installTranslator(we);就行了。但是如果是dll要国际化,这种方法不管用了。
但是我参考这篇文章http://bbs.csdn.net/topics/391882642?locationNum=10,将国际化的installTranslator写在构造函数里面,也没有效果

下面这是写在dll的构造函数里面的
QTranslator we;
if(we.load("C:/Users/QGM/Desktop/dialog/gjh2/cn.qm"))
{
qDebug()<<"成功1";
qDebug()<<QCoreApplication::installTranslator(&we);

}

运行时,打印出“成功1” 和true,也证明调用和安装是成功的,实在不知道错在哪了

...全文
378 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
^卿^ 2016-11-10
  • 打赏
  • 举报
回复
现在可以了,是因为没有在dll的头文件里加Q_OBJECT.现在是在主程序的main调用的qm文件。对于多个dll的问题翻译文件,可以先生成后,然后手工合并为一个ts文件再去生成qm文件。 下面的这个是由两个ts合并的 <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE TS> <TS version="2.1" language="zh_CN"> <context> <name>Gjh1</name> <message> <location filename="gjh1.cpp" line="8"/> <source>btn1</source> <translatorcomment>按钮1</translatorcomment> <translation>按钮1</translation> </message> </context> <!--就是将每个ts的<context>的节点内容取出合并--> <context> <name>Gjh2</name> <message> <source>btn2</source> <translatorcomment>按钮2</translatorcomment> <translation type="vanished">按钮2</translation> </message> <message> <location filename="gjh2.cpp" line="19"/> <source>btn</source> <translatorcomment>按钮</translatorcomment> <translation>按钮</translation> </message> </context> </TS>
^卿^ 2016-11-10
  • 打赏
  • 举报
回复
引用 1 楼 allen_00 的回复:
http://blog.csdn.net/liang19890820/article/details/50276673
其实过程都和这差不多,单个的exe程序我也能实现,但是现在在dll里面就实现不了国际化
allen_00 2016-11-10
  • 打赏
  • 举报
回复
http://blog.csdn.net/liang19890820/article/details/50276673

16,829

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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