如何使用向量<MyObject>与ImGui::ListBox?



我试图在列表框中显示一个对象向量,该向量将在每帧中动态渲染。

这是我的类,我想稍后在列表框中显示每个属性:

class Waypoint {
public:
int x, y, z;
char action;
};

我现在正在尝试的是,因为我真的不知道这一点:

Waypoint wp1;
wp1.action = 'R';
wp1.x = 100;
wp1.y = 100;
wp1.z = 7;
Waypoint wp2;
wp2.action = 'S';
wp2.x = 100;
wp2.y = 100;
wp2.z = 6;
std::vector<Waypoint> listbox_items { wp1, wp2 };
static int listbox_item_current = 1;
ImGui::ListBox("listbox::Cavebot", &listbox_item_current, listbox_items);

当然,这不起作用,我得到了这个错误:

E0304   no instance of overloaded function "ImGui::ListBox" matches the argument list

如何在列表框中动态显示我的所有对象属性?

ImGui::ListBox将一个char*作为显示文本,因此不能使用单个char。你应该这样重新设计你的课程:

class Waypoint {
public:
int x, y, z;
std::string action;
};

然后使用此功能:

bool ImGui::ListBox(const char* label, int* current_item, bool (*items_getter)(void*, int, const char**), void* data, int items_count, int height_in_items)

示例:

bool waypoint_getter(void* data, int index, const char** output)
{
Waypoint* waypoints = (Waypoint*)data;
Waypoint& current_waypoint = waypoints[index];
*output = current_waypoint.action.c_str(); // not very safe
return true;
}
ImGui::ListBox(
"listbox::Cavebot", 
&listbox_item_current, 
waypoint_getter, 
listbox_items.data(), 
listbox_items.size()
);

最新更新