【问题标题】:Show longer String with ImGui [closed]使用 ImGui 显示更长的字符串 [关闭]
【发布时间】:2020-05-22 12:31:16
【问题描述】:

我正在使用 ImGui,OpenGL 的实现工作正常,但现在我在渲染一些文本时遇到了问题。出于某种原因,每当我尝试使用 ImGui::Text(someString.c_str()); 渲染字符串时,ImGui 只会渲染前 19 个字符。如果我尝试使用ImGui::Text("This is a Text longer than 19 characters") 呈现相同的文本,则 ImGui 会呈现整个文本。

我也用ImGui::TextUnformatted(&someString[0], &someString[someString.size()-1]); 进行了尝试,结果相同:前 19 个字符被显示,但其余字符被删除。

但如果我这样做 std::clog << someString.c_str() 它完全可以正常工作。

如果有人能发现我的错误,我会非常高兴,我尝试了很多小时但无法修复它。

【问题讨论】:

  • someString的内容是什么?
  • 啊,这可能是问题所在:我使用了一个 'ü' 来终止字符串。
  • 谢谢,这就是问题所在。

标签: c++ string opengl imgui


【解决方案1】:

问题是我从来没有使用另一个字符串的想法...... someString 的内容包含一个终止字符串的“ü”。但是为什么 'ü' 不能与 ImGui 一起使用是另一个问题。

【讨论】:

    【解决方案2】:

    为了让 ImGui 渲染非标准字符,您需要指定字体应该使用的字符范围,并指示 ImGui 在渲染该字体时使用 utf-8 编码。

    根据你要显示的字符,你需要根据他们的utf-8代码页添加相关代码。大致如下:

    const ImWchar*  ImFontAtlas::GetGlyphRangesPolish()
    {
        static const ImWchar ranges[] =
        {
            0x0020, 0x00FF, // Basic Latin + Latin Supplement
            0x00A0, 0x02D9, // Polish characters 
            0,
        };
        return &ranges[0];
    }
    

    然后您需要将该范围添加到您要在程序中使用的字体中:

    ImFont* font = io.Fonts->AddFontFromFileTTF("fonts/DroidSans.ttf", 17.0f, nullptr, io.Fonts->GetGlyphRangesPolish());
    

    现在您可以在 ImGui 中使用额外导入的文本字符

    ImGui::TextWrapped("łąężü");
    

    如果你不使用这个方法,你会显示??????字符而不是您在 ImGui 中需要的字符。

    【讨论】:

      猜你喜欢
      • 2013-12-30
      • 2020-12-29
      • 1970-01-01
      • 2021-03-12
      • 2015-10-22
      • 2023-04-03
      • 2020-12-18
      • 2011-03-25
      • 1970-01-01
      相关资源
      最近更新 更多