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

Qt 6 QOpenGLWidget嵌套事件循环(模态对话框)渲染中断致纹理损坏

QOpenGLWidget模态对话框弹出时渲染画面损坏问题(Qt 6回归)

当QOpenGLWidget正在渲染复杂场景(如视频图形引擎)时,若打开模态对话框(QFileDialog、QMessageBox等),该控件会显示前一帧的损坏/点状/稀疏版本,而非完整帧或干净状态。这是Qt 5到Qt 6的回归问题,由Qt 6新的合成架构导致。

代码示例

class GLWidget : public QOpenGLWidget {
    void paintGL() override {
        // 多阶段繁重渲染
        for (int i = 0; i < 6; i++) {
            glBindFramebuffer(GL_FRAMEBUFFER, m_fbos[i]);
            renderScene(i);
        }
        
        // 异步PBO回读
        glBindBuffer(GL_PIXEL_PACK_BUFFER, m_pbo);
        glReadPixels(0, 0, 1920, 1080, GL_RGBA, GL_UNSIGNED_BYTE, nullptr);
        
        // 渲染至默认帧缓冲
        glBindFramebuffer(GL_FRAMEBUFFER, defaultFramebufferObject());
        renderFinalQuad();
        
        update();  // 调度下一帧
    }

     // 触发问题的操作:渲染时打开模态对话框,对话框弹出期间glWidget显示损坏
     // QString file = QFileDialog::getOpenFileName(this, "Open", path, "*.dat");
};

现象对比图

消息框损坏GL输出
渲染状态对比

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.02 04:34:51