如何在ImGui列中右对齐文本?

时间:2019-09-21 23:00:40

标签: c++ imgui

假设我用以下内容创建一个表:

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,但我不知道它们在多列行中如何工作。

2 个答案:

答案 0 :(得分:2)

我在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);

答案 1 :(得分:0)

与 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);