如何在 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)中的文本在列中右对齐?我见过CalcItemWidthCalcTextSize,但我不知道它们在多列行中是如何工作的。

【问题讨论】:

【参考方案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 中右对齐文本?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iOS7 中右对齐 UISearchbar 的文本

如何在 Android TextView 或 EditText 中右对齐文本?

在 UITextField 中右对齐 PlaceHolder 文本

使用 CSS 在有序列表中右对齐合法样式的数字和左对齐文本

如何对齐 3 个 div 左中右? [复制]

CSS img align:如何在 DIV 中设置 img 中右对齐