如何在 ImGui Columns 中右对齐文本?
Posted
技术标签:
【中文标题】如何在 ImGui Columns 中右对齐文本?【英文标题】:How to right align text in ImGui Columns? 【发布时间】:2019-09-21 23:00:40 【问题描述】:假设我创建了一个包含以下内容的表:
ImGui::Columns(3);
ImGui::Text("Header 1");
ImGui::NextColumn();
ImGui::Text("Header 2");
ImGui::NextColumn();
ImGui::Text("Header 3");
ImGui::NextColumn();
ImGui::Text("1");
ImGui::NextColumn();
ImGui::Text("2");
ImGui::NextColumn();
ImGui::Text("3");
ImGui::NextColumn();
ImGui::Columns(1);
如何使第二行(1、2 和 3)中的文本在列中右对齐?我见过CalcItemWidth
和CalcTextSize
,但我不知道它们在多列行中是如何工作的。
【问题讨论】:
【参考方案1】:我在 ImGui Discord 频道中获得了帮助并想出了这个解决方案:
ImGui::NextColumn();
std::string text = "1";
ImGui::SetCursorPosX(ImGui::GetCursorPosX() + ImGui::GetColumnWidth() - ImGui::CalcTextSize(text.c_str()).x
- ImGui::GetScrollX() - 2 * ImGui::GetStyle().ItemSpacing.x);
ImGui::Text("%s", text);
【讨论】:
【参考方案2】:与 iHowell 答案几乎相同的代码,但应根据当前位置值检查新的 x 位置,以便与窗口边框对齐(然后将右剪切文本)。 在代码中:
ImGui::NextColumn();
std::string text = "1";
auto posX = (ImGui::GetCursorPosX() + ImGui::GetColumnWidth() - ImGui::CalcTextSize(text.c_str()).x
- ImGui::GetScrollX() - 2 * ImGui::GetStyle().ItemSpacing.x);
if(posX > ImGui::GetCursorPosX())
ImGui::SetCursorPosX(posX);
ImGui::Text("%s", text);
【讨论】:
更清楚地说,您可以改写“与以前相同的答案”,因为我不知道您指的是什么。但是代码有点帮助,谢谢。以上是关于如何在 ImGui Columns 中右对齐文本?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Android TextView 或 EditText 中右对齐文本?