Qt tr()翻译 加载 问题

weixin_38058939 2019-09-19 12:53:34
加载qm时,有些没有翻译过来,显示的还是原本的! 是这样的,我想把所有成员变量写在一个类中,这些成员变量是公共 的,供其它类来访问修改,那么问题来了:在其它类中调用全局变量或全局类后翻译后,加载时没有翻译过来,都保持了原样;  网上说的大部分资料我都看过,大部分针对的是乱码问题,对于我这种形式的介绍的比较少,我不知道怎么办,所以来求助各位大侠: 我的问题就是:全局的类实例变量, 在其它类中访问类成员的时候,用Qt Linguist 翻译后没有加载翻译过来![color=rgba(0, 0, 0, 0)]代码抽出来了,简化成以下示例:test.pro:[color=rgba(0, 0, 0, 0)]复制代码QT += core guiTARGET = TestTEMPLATE = appSOURCES += main.cpp test.cpp global.cppHEADERS  += test.h global.hFORMS    += test.uiTRANSLATIONS =  test.tsRESOURCES +=  test.qrc全局类:global.h:[color=rgba(0, 0, 0, 0)]复制代码#ifndef GLOBAL_H#define GLOBAL_H#include <QString>class Global{public:    Global();    QString strTest;};**global.cpp:**extern Global myGlobal;#endif // GLOBAL_H#include "global.h"#include <QObject>Global myGlobal;Global::Global(){    strTest = QObject::tr("Text");};测试类:test.h:[color=rgba(0, 0, 0, 0)]复制代码#ifndef TEST_H#define TEST_H#include <QDialog>namespace Ui {    class Test;}class Test : public QDialog{    Q_OBJECTpublic:    explicit Test(QWidget *parent = 0);    ~Test();private:    Ui::Test *ui;};#endif // TEST_Htest.cpp:[color=rgba(0, 0, 0, 0)] 复制代码#include "test.h"#include "ui_test.h"#include "global.h"Test::Test(QWidget *parent) :    QDialog(parent),    ui(new Ui::Test){    ui->setupUi(this);    //文字还是翻译前的,没有进行更新:    ui->lbTest->setText(myGlobal.strTest);    //如果定义一个局部变量,是可以成功显示翻译后的文本,但是这样没用呀,因为这个类变量要是全局的,其它类也要访问和修改:   //Global test;    //ui->lbTest->setText(test.strTest);}Test::~Test(){    delete ui;}test.ui:就加一个标签控件,用于显示文本[color=rgba(0, 0, 0, 0)] 复制代码<?xml version="1.0" encoding="UTF-8"?><ui version="4.0"> <class>Test</class> <widget class="QDialog" name="Test">  <property name="geometry">   <rect>    <x>0</x>    <y>0</y>    <width>400</width>    <height>300</height>   </rect>  </property>  <property name="windowTitle">   <string>Test</string>  </property>  <layout class="QGridLayout" name="gridLayout">   <item row="0" column="0">    <widget class="QLabel" name="lbTest">     <property name="text">      <string/>     </property>     <property name="alignment">      <set>Qt::AlignCenter</set>     </property>    </widget>   </item>  </layout> </widget> <layoutdefault spacing="6" margin="11"/> <resources/> <connections/></ui>Main.cpp:[color=rgba(0, 0, 0, 0)] 复制代码#include <QtGui/QApplication>#include "test.h"#include <QTextCodec>#include <QTranslator>QTranslator *myTranslator;int main(int argc, char *argv[]){    QApplication a(argc, argv);    myTranslator = new QTranslator();    myTranslator->load(":/test.qm");    a.installTranslator(myTranslator);    Test w;    w.show();    return a.exec();}用Qt Linguist 将文本“Text”翻译成“Update Text”:编译运行,没有变化,显示的还是原“Text”!如果在test类中定义局部变量,就会成功,显示的是翻译后的(但是局部的没用,不是我想要的,我需要的是全局的):期间:文件编码用GB2312和UTF-8都试过,翻译都无效!tr编码用GB2312和UTF-8都试过,翻译也都无效!头疼呀 ,请各位大侠赐教,谢谢!
...全文
380 1 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_38065223 2019-09-19
  • 打赏
  • 举报
回复
你这个是因为,你的全局变量的构造函数,在你installTranslator之前已经被调用了,和Qt的翻译无关。你可以使用单例模式来保存你这些字符串,把对象创建的过程延迟到第一次使用时,这样就没问题了。或者定义Global的全局指针,在main()函数中new Global出来,new Global放在installTranslator调用后面。

474

社区成员

发帖
与我相关
我的任务
社区描述
其他技术讨论专区
其他 技术论坛(原bbs)
社区管理员
  • 其他技术讨论专区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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