这是我的代码的当前片段:
...
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) 导致应用程序崩溃。我不知道该怎么做才能让这项工作成功。
现在明白了。答案是在创建按钮之前放置
ImGui::PushID(i);
,在创建按钮之后放置 ImGui::PopID();
。