如何移除ImGui按钮、切换按钮文本并阻止设置窗口关闭?
问题解决与代码修改
核心问题分析
你的代码里settings和Decimal_places都是局部变量,每次调用RenderUI()时都会被重置为初始值,直接导致两个问题:
- 设置窗口仅能显示一帧,下次函数调用时
settings变回false,窗口自动关闭 Decimal_places始终为false,按钮永远显示「Off」,点击后的状态无法保留
修改后的代码
#include "Application.h" #include "imgui.h" namespace MyApp { void RenderUI() { // 用static修饰变量,让状态在函数调用间保留 static bool Decimal_places = false; static bool settings = false; ImGui::Begin("Main"); // 点击Settings按钮时切换窗口显示状态 if (ImGui::Button("Settings")) { settings = !settings; } ImGui::End(); // 渲染Settings窗口,处理窗口关闭事件 if (settings) { if (ImGui::Begin("Settings", &settings)) { // 根据状态动态切换按钮文本 if (ImGui::Button(Decimal_places ? "On" : "Off")) { Decimal_places = !Decimal_places; } } ImGui::End(); } } }
关键改动说明
- 变量改为static:
static修饰的局部变量仅初始化一次,后续函数调用会保留上一次的赋值结果,解决状态丢失问题。 - Settings按钮逻辑优化:将
settings = true改为settings = !settings,点击按钮时切换窗口的显示/隐藏状态,支持打开和关闭操作。 - 处理窗口关闭事件:
ImGui::Begin("Settings", &settings)传入settings的指针,当用户点击窗口右上角关闭按钮时,ImGui会自动将settings设为false,同步关闭窗口。 - 动态切换按钮文本:通过三元运算符
Decimal_places ? "On" : "Off",根据当前状态显示对应文本,点击按钮时切换Decimal_places的状态。
内容的提问来源于stack exchange,提问作者Himanshu
相关产品推荐
相关产品推荐

