6

假设我创建了一个包含以下内容的表:

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)中的文本在列中右对齐?我见过CalcItemWidthand CalcTextSize,但我无法弄清楚它们如何在多列行中工作。

4

2 回答 2

9

我在 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);
于 2019-09-22T19:25:07.857 回答
1

与 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);
于 2021-02-08T20:41:28.520 回答