查看: 3383|回复: 5

Label,中文显示

[复制链接]

该用户从未签到

发表于 2012-4-26 16:54:39 | 显示全部楼层 |阅读模式
本帖最后由 nick.JD 于 2012-4-26 16:55 编辑

Lable 中有这么两个方法来设置标签上要显示的内容,可是在输出汉字字符串的时候出现了乱码,英文的没问题
  1. void osgWidget::Label::setLabel  ( const std::string &   )  
  2. void osgWidget::Label::setLabel  ( const osgText::String &   )
复制代码

该用户从未签到

发表于 2012-4-26 19:07:08 | 显示全部楼层
struct ColorLabel: public osgWidget:abel {
    ColorLabel(const char* label): osgWidget::Label(label, "")
   {

        setlocale(LC_ALL, ".936");
        setFont("fonts/simhei.ttf"); //字体您看着修改
        setFontSize(14);
        setFontColor(1.0f, 1.0f, 1.0f, 1.0f);
               
        setColor(0.3f, 0.3f, 0.3f, 1.0f);
        setPadding(2.0f);
        setCanFill(true);
               
        addSize(150.0f, 25.0f);

        int requiredSize = mbstowcs(NULL, label, 0);
        wchar_t* wtext = new wchar_t[requiredSize+1];
        mbstowcs(wtext, label, requiredSize+1);
        setLabel(wtext);
        delete wtext;
        setEventMask(osgWidget::EVENT_MOUSE_PUSH | osgWidget::EVENT_MASK_MOUSE_MOVE);
    }

    bool mousePush(double, double, const osgWidget::WindowManager*) {
        osgWidget::Table* p = dynamic_cast<osgWidget::Table*>(_parent);
       
        if(!p) return false;
               
        p->hide();

        const std::string& name = getName();

        if(!name.compare("XXX")) //XXX为Lable的内容
      {
          //执行您的代码
      }

        return true;
    }

    bool mouseEnter(double, double, const osgWidget::WindowManager*) {
        setColor(0.9f, 0.6f, 0.1f, 1.0f);
               
        return true;
    }

    bool mouseLeave(double, double, const osgWidget::WindowManager*) {
        setColor(0.3f, 0.3f, 0.3f, 1.0f);
               
        return true;
    }
};




//上面那段代码是在我的程序里面截取出的一部分,您看着借鉴嘛~~~ 总之是可以正常显示中文的~~~~
//估计您需要重载osgWidget::Label 这个类~~~  
//本人也是新手,可能上面的地方有错,还望见谅!

该用户从未签到

发表于 2012-4-26 19:08:28 | 显示全部楼层
还有一种方法, 将字符串转化为另外的字符串

该用户从未签到

 楼主| 发表于 2012-5-6 20:02:35 | 显示全部楼层
osger 发表于 2012-4-26 19:08
还有一种方法, 将字符串转化为另外的字符串

能具体一点吗?

该用户从未签到

 楼主| 发表于 2012-5-6 20:33:52 | 显示全部楼层
解决了!!!,有的字体不支持中文,比如Vera.ttf就不支持中文,当使用simhei.ttf就好了,大家要注意!!!:lol:lol:lol:lol:lol:lol

该用户从未签到

发表于 2014-8-15 20:15:03 | 显示全部楼层
l917685120 发表于 2012-4-26 19:07
struct ColorLabel: public osgWidget:abel {
    ColorLabel(const char* label): osgWidget:abel(la ...

setLabel(wtext);请问你这个怎么实现的啊?我的不能用宽字符类型的参数啊。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表