当for循环大于0时,ImGui Button无法识别点击?

问题描述 投票:0回答:1

这是我的代码的当前片段:

...
class ObjectA{
    public:
        int id;
        std::string name;
        std::string description;
};
...
ObjectA a;
a.id = 1;
a.name = "Refrigerator";
a.description = "Something for cooling food";

ObjectA b;
b.id = 2;
b.name = "Candle";
b.description = "Something you light on fire with a lighter";

ObjectA c;
c.id = 3;
c.name = "Cup";
c.description = "Something you pour liquid in";

std::vector<ObjectA> obja;
obja.push_back(a);
obja.push_back(b);
obja.push_back(c);

int Display(){
    ImGui::Text("Object names:");

    for(int i=0; i<obja.size(); i++){
        ImGui::Text("%s", obja.at(i).name);
        ImGui::SameLine();
        if(ImGui::Button("More")){
            system("xman");
            ...
        }
        ...
    }
}
...
int main(){
    ...
    while(!glfwWindowShouldClose(window)){
        ...
        ImGui::Begin();
        Display();
        ImGui::End();
    }
    ...
}

使用第一个对象 (obja.at(1)) 识别点击,但使用第二个对象或第三个对象识别。

它也应该适用于其他按钮,但事实并非如此。我已经尝试过几件事,包括关闭 if(true) 语句或 while(true) 语句。 if(true) 什么也没做,而 while(true) 导致应用程序崩溃。我不知道该怎么做才能让这项工作成功。

c++ glfw imgui
1个回答
0
投票

现在明白了。答案是在创建按钮之前放置

ImGui::PushID(i);
,在创建按钮之后放置
ImGui::PopID();

© www.soinside.com 2019 - 2024. All rights reserved.