使用 ImGui 显示更长的字符串 [关闭]
Posted
技术标签:
【中文标题】使用 ImGui 显示更长的字符串 [关闭]【英文标题】:Show longer String with ImGui [closed] 【发布时间】: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
的内容是什么?
啊,这可能是问题所在:我使用了一个 'ü' 来终止字符串。
谢谢,这就是问题所在。
【参考方案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 中需要的字符。
【讨论】:
以上是关于使用 ImGui 显示更长的字符串 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
使用python正则表达式在字符串中搜索长度为6或更长的特定重复(mnr)
从字符串中获取 char * 或 const char * 数据会中断 16 个字符或更长的字符串
如何配置内存中的 Camunda 数据库以接受更长的字符串过程变量?
在更长的字符串中,如何在 PostgreSQL(和/或 Python 3)中将一个字符(例如,'a')和一个变音字符(例如,'U+030A')转换为单个字符('å')[重复]