C++ 使用ImGui显示更长的字符串
我使用的是ImGui,OpenGL的实现工作得很好,但是现在我在渲染一些文本时遇到了问题。出于某种原因,每当我尝试使用C++ 使用ImGui显示更长的字符串,c++,string,opengl,imgui,C++,String,Opengl,Imgui,我使用的是ImGui,OpenGL的实现工作得很好,但是现在我在渲染一些文本时遇到了问题。出于某种原因,每当我尝试使用ImGui::Text(someString.c_str())呈现字符串时ImGui仅呈现前19个字符。如果我试图用ImGui::Text(“这是一个超过19个字符的文本”)呈现相同的文本,ImGui呈现整个文本 我也用ImGui::textformatted(&someString[0],&someString[someString.size()-1])尝试了它,结果相同:显示
ImGui::Text(someString.c_str())呈现字符串时代码>ImGui仅呈现前19个字符。如果我试图用ImGui::Text(“这是一个超过19个字符的文本”)呈现相同的文本,
ImGui呈现整个文本
我也用ImGui::textformatted(&someString[0],&someString[someString.size()-1])尝试了它代码>,结果相同:显示前19个字符,但其余字符被切掉
但是如果我做了std::clog,问题是我从来没有想过使用另一个字符串。。。
someString
的内容包含一个以字符串结尾的'u'。但是为什么“ü”不适用于ImGui是另一个问题。为了让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中需要的字符
someString的内容是什么?
?可能这就是问题所在:我用了一个“ü”来终止字符串。谢谢,这就是问题所在。