You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何移除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();
        }
    }
}

关键改动说明

  1. 变量改为static:static修饰的局部变量仅初始化一次,后续函数调用会保留上一次的赋值结果,解决状态丢失问题。
  2. Settings按钮逻辑优化:将settings = true改为settings = !settings,点击按钮时切换窗口的显示/隐藏状态,支持打开和关闭操作。
  3. 处理窗口关闭事件:ImGui::Begin("Settings", &settings)传入settings的指针,当用户点击窗口右上角关闭按钮时,ImGui会自动将settings设为false,同步关闭窗口。
  4. 动态切换按钮文本:通过三元运算符Decimal_places ? "On" : "Off",根据当前状态显示对应文本,点击按钮时切换Decimal_places的状态。

内容的提问来源于stack exchange,提问作者Himanshu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 13:50:21