假设我创建了一个包含以下内容的表:
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,但我搞不懂它们在多列行中是如何工作的。
发布于 2019-09-23 03:25:08
我在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);发布于 2021-02-09 04:41:29
与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);https://stackoverflow.com/questions/58044749
复制相似问题