• 6273阅读
  • 3回复

全局函数的tr问题 [复制链接]

上一主题 下一主题
离线bangqianchen
 

只看楼主 倒序阅读 楼主  发表于: 2008-09-25
— 本帖被 XChinux 执行加亮操作(2008-09-25) —
定义了一个结构体
struct XXXMap
{
    char* item;
    char* desc;
}

在很多地方都要用,因此在全局函数里面声明一个这样的结构体数组,
AppGlobal.h
extern XXXMapg_Param[];

AppGlobal.cpp中
XXXMap g_Param[]=
{
    {"Id","编号"},
    {"Name","名称"},
};
如果这样的话,是没有问题的,但是想让字符串加上tr以后方便翻译,换成下面的初始化方式发现desc并没有赋值成功,Id与Name的desc总是为一个空串。
XXXMap g_Param[]=
{
    {"Id",QObject::tr("编号").toAscii().data()},
    {"Name",QObject::tr("名称").toAscii().data()},
};
我也曾试过将item与desc定义为QString类型的,这样声明后不能这样初始化对象,语法关就过不了,说没有构造函数。
XXXMap g_Param[]= //将item与desc换为QString类型
{
    {QObject::tr("Id"),QObject::tr("编号")},
    {QObject::("Name"),QObject::tr("名称")},
};
请问大家有没有办法既能使用tr()又能保证成功初始化的?麻烦指点一二。
离线mumutouv

只看该作者 1楼 发表于: 2008-09-25
这样显然不行的,你懂点编译原理就知道了,理论上面不可能实现的嘛。全局变量是在程序启动之前就已经分配好的,而你的翻译文件是在程序启动之后加载的,你说说看,难道全局变量根据你翻译的字符串大小来重新来定义他的全局变量占用空间大小,显然是不可能的嘛。
离线XChinux

只看该作者 2楼 发表于: 2008-09-25
在main()里加载翻译文件完之后调用一下自己写的一个initialization()函数,用于初始化你自己的N多变量。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线bangqianchen

只看该作者 3楼 发表于: 2008-09-25
不好意思,计算机是我的二外,没有学习过编译原理,很多东西只知其一不知其二,或者知道没能好好的联系起来。
现在在做一个数据库,希望它拥有这样的功能,谢了,各位,继续努力学习中...
快速回复
限100 字节
 
上一个 下一个