国际化-Qt tr()翻译 加载 问题

问题描述

Qt tr()翻译 加载 问题

关于Qt 多语言的问题

   加载qm时,有些没有翻译过来,显示的还是原本的! 是这样的,我想把所有成员变量写在一个类中,这些成员变量是公共 的,供其它类来访问修改,那么问题来了:在其它类中调用全局变量或全局类后翻译后,加载时没有翻译过来,都保持了原样;  网上说的大部分资料我都看过,大部分针对的是乱码问题,对于我这种形式的介绍的比较少,我不知道怎么办,所以来求助各位大侠:

 代码抽出来了,简化成以下示例:

test.pro:

  QT += core gui
TARGET = Test
TEMPLATE = app
SOURCES += main.cpp test.cpp global.cpp
HEADERS  += test.h global.h
FORMS    += test.ui
TRANSLATIONS =  test.ts
RESOURCES +=  test.qrc

全局类:
global.h:

 #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:

#ifndef TEST_H
#define TEST_H

#include <QDialog>

namespace Ui {
    class Test;
}

class Test : public QDialog
{
    Q_OBJECT

public:
    explicit Test(QWidget *parent = 0);
    ~Test();

private:
    Ui::Test *ui;
};

#endif // TEST_H

test.cpp:

 #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:就加一个标签控件,用于显示文本

 <?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:

 #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都试过,翻译也都无效!

头疼呀 ,请各位大侠赐教,谢谢!

解决方案

参考:http://www.cnblogs.com/chuncn/archive/2012/06/04/2534898.html

时间: 2024-10-30 15:05:41

国际化-Qt tr()翻译 加载 问题的相关文章

qt 场景中加载图片并设置图片缩放

问题描述 qt 场景中加载图片并设置图片缩放 我想在qt场景中增加背景图片,且设置背景图片为缩放显示.使用setBackgroundBrush函数默认是平铺,请大家给我提供好的建议,万分感谢! 解决方案 http://blog.csdn.net/liukang325/article/details/44832397 解决方案二: qt例子里面有,40000 Chips 这个例子

技术-qt里定义qml的单例模式,然后用loader加载qml文件,一直加载不完

问题描述 qt里定义qml的单例模式,然后用loader加载qml文件,一直加载不完 qt里定义qml的单例模式,然后用loader加载qml文件,一直加载不完. 为什么啊?谁做过相关的技术,能给指导一下么? 这里单例文件是 Style.qml 定义了 qmldir 但是Style里用了另一个自定义属性QML文件作为属性, 如 //Style.qml pragma Singleton import QtQuick 2.3 import "." QtObject { property A

为什么python使用ctypes无法加载qt生成的dll?

问题描述 为什么python使用ctypes无法加载qt生成的dll? 使用ctypes可以加载windows生成的dll,但是无法加载qt生成的dll,dll使用vs depends工具 查看,确定是已经以C语言风格导出了dll,但是ctypes加载qt生成的dll报错:找不到指定的 模块,不知道为什么? 开发环境: window7 x86 python3.4 qt5.5 解决方案 http://zhidao.baidu.com/link?url=dGN1daBiSYSJvTICcE-AiR4

用qt做的浏览器,加载百度页面出错

问题描述 用qt做的浏览器,加载百度页面出错 初学qt 做了一个浏览器浏览网页,加载百度时出错: 注意红框处,正常浏览器加载百度页面时换一换可用,图片可滚动显示,我做的无法滚动显示图片,换一换不可用 解决方案 页面出错了,可能你的浏览器控件支持不够好 解决方案二: 还有就是百度搜索新浪微博,点击之后地址栏加载http://passport.weibo.com/visitor/visitor?entry=miniblog&a=enter&url=http%3A%2F%2Fweibo.com%

mac下面qt连接mysql怎么会出现驱动加载不了,我的qt是5.4的!

问题描述 mac下面qt连接mysql怎么会出现驱动加载不了,我的qt是5.4的! QSqlDatabase: QMYSQL driver not loaded QSqlDatabase: available drivers: QSQLITE QMYSQL QMYSQL3 QODBC QODBC3 QPSQL QPSQL7 QSqlDatabase: an instance of QCoreApplication is required for loading driver plugins 解决

Qt之加载QSS文件

简述 Qt中关于样式的使用很常见,为了降低耦合性(与逻辑代码分离),我们通常会定义一个QSS文件,然后编写各种部件(例如:QLable.QLineEdit.QPushButton)的样式,最后使用QApplication进行样式加载,这样,就可以让整个应用程序就共享同一个样式. 简述 新建QSS文件 编写QSS 加载QSS 实现原理 更多参考 新建QSS文件 首先,新建一个后缀名为qss的文件,例如:style.qss,将其加入资源文件(qrc)中. 提示:也可以使用绝对路径或相对路径. 编写Q

移动-QT加载图片失败路径问题

问题描述 QT加载图片失败路径问题 最近在做个移动端的QT应用,在加载图片时遇到加载失败的问题代码如下: QImage image("asset:///begin/maindlg/deviver.png"); QImage image(":/asset/begin/maindlg/deviver.png"); QImage image(".asset/begin/maindlg/deviver.png"); 以上的三种方法都不想,相对路径和绝对路

【翻译】基于 Create React App路由4.0的异步组件加载(Code Splitting)

基于 Create React App路由4.0的异步组件加载 本文章是一个额外的篇章,它可以在你的React app中,帮助加快初始的加载组件时间.当然这个操作不是完全必要的,但如果你好奇的话,请随意跟随这篇文章一起用Create React App和 react路由4.0的异步加载方式来帮助react.js构建大型应用. 代码分割(Code Splitting) 当我们用react.js写我们的单页应用程序时候,这个应用会变得越来越大,一个应用(或者路由页面)可能会引入大量的组件,可是有些组

DataTables+BootStrap组合使用Ajax来获取数据并且动态加载dom的方法(排序,过滤,分页等)_jquery

Datatables是一款jquery表格插件.它是一个高度灵活的工具,可以将任何HTML表格添加高级的交互功能. 主要功能 分页,即时搜索和排序 几乎支持任何数据源:DOM, javascript, Ajax 和 服务器处理 支持不同主题 DataTables, jQuery UI, Bootstrap, Foundation 各式各样的扩展: Editor, TableTools, FixedColumns -- 丰富多样的option和强大的API 支持国际化 超过2900+个单元测试 免