使用ImGui代码时标签页内窗口变灰的原因及解决请求
问题解决:ImGui标签页内窗口点击背景后失焦变灰
问题原因
你当前直接在ImGui::BeginTabItem()代码块里创建独立窗口,这些窗口不属于标签页的子容器。点击标签页黑色背景时,ImGui会把焦点设置到标签页本身,导致内部独立窗口被"遮挡"失焦,无法重新获取焦点。
解决方法
用ImGui::BeginChild()创建一个子窗口容器,把标签页内要显示的所有窗口放在这个子容器里。子容器会作为标签页的内部区域,点击其背景不会影响内部窗口的焦点状态,窗口能始终保持可操作。
修改后的代码
if(ImGui::BeginTabItem(plot_window[i].name)) { // 创建自动填充标签页的子容器 ImGui::BeginChild("TabContent", ImVec2(0, 0), false); ImGui::SetNextWindowSize(ImVec2(200, 200), ImGuiCond_FirstUseEver); ImGui::Begin("My first", &p_open); ImGui::Text("窗口1内容"); ImGui::End(); ImGui::SetNextWindowSize(ImVec2(200, 200), ImGuiCond_FirstUseEver); ImGui::Begin("My second", &p_open); ImGui::Text("窗口2内容"); ImGui::End(); ImGui::EndChild(); // 结束子容器 ImGui::EndTabItem(); }
补充说明
ImGui::BeginChild("TabContent", ImVec2(0, 0), false)里的ImVec2(0,0)让子容器自动填充标签页可用空间;最后一个参数false表示不显示子容器边框,需要边框可改为true。- 修改后内部窗口属于子容器的子元素,点击子容器背景不会被夺走焦点,无需强制调用
SetWindowFocus,窗口始终保持交互性。
内容的提问来源于stack exchange,提问作者ogc21
相关产品推荐
相关产品推荐

