首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在ImGui::ListBox中使用vector<MyObject>?

如何在ImGui::ListBox中使用vector<MyObject>?
EN

Stack Overflow用户
提问于 2022-07-02 13:13:14
回答 1查看 502关注 0票数 1

我试图在一个列表框中显示一个对象向量,它将在每个帧中动态呈现。

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

代码语言:javascript
复制
class Waypoint {
public:
    int x, y, z;
    char action;
};

当我不太清楚的时候,我正在尝试的是:

代码语言:javascript
复制
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);

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

代码语言:javascript
复制
E0304   no instance of overloaded function "ImGui::ListBox" matches the argument list

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-02 14:09:53

ImGui::ListBoxchar*作为显示的文本,因此不能使用单个char。你应该像这样重新设计你的班级:

代码语言:javascript
复制
class Waypoint {
public:
    int x, y, z;
    std::string action;
};

然后使用以下函数:

代码语言:javascript
复制
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)

示例:

代码语言:javascript
复制
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()
);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72839318

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档