static ImVector<int> selection;
static void ShowDemoWindowTables2(){
static ImGuiTableFlags flags =
ImGuiTableFlags_Resizable | ImGuiTableFlags_Reorderable | ImGuiTableFlags_Hideable
| ImGuiTableFlags_Sortable | ImGuiTableFlags_SortMulti
| ImGuiTableFlags_RowBg | ImGuiTableFlags_Borders |ImGuiTableFlags_BordersInnerH//|ImGuiTableFlags_NoBordersInBody
| ImGuiTableFlags_ScrollX | ImGuiTableFlags_ScrollY| ImGuiTableFlags_NoHostExtendX
| ImGuiTableFlags_SizingFixedFit;
static ImVec2 outer_size_value = ImVec2(0.0f, 16 * 12);//限制表宽高
if (ImGui::BeginTable("table_advanced", 6, flags)) {//, outer_size_value)) {
ImGui::SetWindowFontScale(1.2);
//ImGuiTableColumnFlags_DefaultSort 排序角标 ImGuiTableColumnFlags_NoSort 去排序角标
ImGui::TableSetupColumn("ID", ImGuiTableColumnFlags_None | ImGuiTableColumnFlags_NoSort | ImGuiTableColumnFlags_WidthFixed | ImGuiTableColumnFlags_NoHide, 0.0f, 0);
ImGui::TableSetupColumn("Name", ImGuiTableColumnFlags_None | ImGuiTableColumnFlags_NoSort | ImGuiTableColumnFlags_WidthFixed, 0.0f, 1);
ImGui::TableSetupColumn("Action", ImGuiTableColumnFlags_None | ImGuiTableColumnFlags_NoSort | ImGuiTableColumnFlags_WidthFixed, 0.0f, 2);
ImGui::TableSetupColumn("Quantity", ImGuiTableColumnFlags_None | ImGuiTableColumnFlags_NoSort | ImGuiTableColumnFlags_PreferSortDescending, 0.0f, 3);
ImGui::TableSetupColumn("Description", ImGuiTableColumnFlags_None | ImGuiTableColumnFlags_NoSort | ((flags & ImGuiTableFlags_NoHostExtendX) ? 0 : ImGuiTableColumnFlags_WidthStretch), 0.0f, 4);
//隐藏行
ImGui::TableSetupColumn("Hidden", ImGuiTableColumnFlags_None | ImGuiTableColumnFlags_DefaultHide | ImGuiTableColumnFlags_NoSort);
ImGui::TableSetupScrollFreeze(1, 1);//锁定行 不滑动
ImGui::TableHeadersRow();
ImGui::SetWindowFontScale(1.0);
for (int row_n = 0; row_n < 10; row_n++) {
const bool item_is_selected = selection.contains(row_n);
//ImGui::PushID(row_n);
ImGui::TableNextRow(ImGuiTableRowFlags_None);
// For the demo purpose we can select among different type of items submitted in the first column
ImGui::TableSetColumnIndex(0);
char label[32];
sprintf_s(label, sizeof label, "%04d", row_n);
if (ImGui::Selectable(label, item_is_selected, ImGuiSelectableFlags_SpanAllColumns | ImGuiSelectableFlags_AllowOverlap, ImVec2(0, 30)))
{
if (ImGui::GetIO().KeyCtrl){
if (item_is_selected)
selection.find_erase_unsorted(row_n);
else
selection.push_back(row_n);
}else{
selection.clear();
selection.push_back(row_n);
}
}
if (ImGui::TableSetColumnIndex(1))
ImGui::TextUnformatted("item->Name");
if (ImGui::TableSetColumnIndex(2)) {
if (ImGui::SmallButton("Chop")) {}
}
if (ImGui::TableSetColumnIndex(3))
ImGui::Text("%d", row_n);
ImGui::TableSetColumnIndex(4);
ImGui::Text("Lorem ipsum dolor sit amet");
if (ImGui::TableSetColumnIndex(5))
ImGui::Text("1234");
//ImGui::PopID();
}
ImGui::EndTable();
}
}
static void ShowDemoWindowTables() {
//在这里,我们将展示三种不同的输出表的方法。
//它们是同样事物的非常简单的变体!
// [方法1]使用TableNextRow()创建新行,使用TableSetColumnIndex()选择列。
在许多情况下,这是最灵活、最易于使用的模式
if (ImGui::BeginTable("table1",3, ImGuiTableFlags_HighlightHoveredColumn)){
ImGui::SetWindowFontScale(1.3);
ImGui::TableSetupColumn("Game", ImGuiTableColumnFlags_WidthFixed, 80);
ImGui::TableSetupColumn("LoadJson", ImGuiTableColumnFlags_WidthFixed,80);
ImGui::TableSetupColumn("LGM", ImGuiTableColumnFlags_WidthFixed, 80);
ImGui::TableSetupScrollFreeze(0, 1);
ImGui::TableHeadersRow();
ImGui::SetWindowFontScale(1);
for (int row = 0; row < 4; row++){
ImGui::TableNextRow();
ImGui::TableSetBgColor(ImGuiTableBgTarget_RowBg0, ImGui::ColorConvertFloat4ToU32(ImVec4(.9, .0, .0, .5)));
ImGui::SetNextItemAllowOverlap();
for (int column = 0; column < 3; column++) {
ImGui::TableSetColumnIndex(column);
char buff[40];
sprintf_s(buff,sizeof buff, "Row %d %d", row, column);
ImGui::Text(buff, row, column);
}
}
ImGui::EndTable();
}
// [方法2]使用多次调用的TableNextColumn(),而不是使用for循环+ TableSetColumnIndex()。
// 当您有代码手动提交每列的内容时,这通常更方便。
if (ImGui::BeginTable("table2", 3)) {
for (int row = 0; row < 4; row++){
ImGui::TableNextRow();
ImGui::TableNextColumn();
ImGui::Text("Row %d", row);
ImGui::TableNextColumn();
ImGui::Text("Some contents");
ImGui::TableNextColumn();
ImGui::Text("123.456");
}
ImGui::EndTable();
}
// [方法3]我们调用TableNextColumn() _before_每个单元格。我们从不调用TableNextRow()
// 因为TableNextColumn()将自动包裹并根据需要创建新的鱼子。
// 当您的单元格都包含相同类型的数据时,这通常更方便。
if (ImGui::BeginTable("table3", 3)) {
for (int item = 0; item < 14; item++) {
ImGui::TableNextColumn();
ImGui::Text("Item %d", item);
}
ImGui::EndTable();
}
}
imgui 表格
于 2024-08-03 16:59:59 首次发布