paintEvent中的Qt QPainter消除了用paintGL绘制的图形

Posted

技术标签:

【中文标题】paintEvent中的Qt QPainter消除了用paintGL绘制的图形【英文标题】:Qt QPainter in paintEvent eliminates the graphic drawn with paintGL 【发布时间】:2012-07-17 21:31:11 【问题描述】:

我有以下代码

void QMyWidget::paintEvent(QPaintEvent *event)


    updateGL(); // This calls for initializeGL and then paintGL and draws a nice openGL 3D scene


    QPainter painter(this); 
    // Draw something with QPainter..

问题在于QPainter 行多次调用initializeGL 和paintGL 并最终在我的OpenGL 渲染场景上创建一个空白/灰色区域。如果我尝试使用QPainter 绘制类似drawText 的东西,显示了文本,但文本的背景是一个灰色矩形,完全覆盖了我的 OpenGL 绘制场景。

这是怎么回事?

【问题讨论】:

如果你调用“updateGL();”会发生什么在“QPainterpainter(this);”之后? 有一个闪烁,我可以看到我的 3D 场景渲染,然后整个场景变白,QPainter 的内容被渲染而不是 3D 场景 提供附加信息:如果我使用 QPainter 画家; (没有选择设备)一切正常。似乎是 QPainter 画家(这个);在处理之前清除渲染的帧缓冲区 恐怕有些 VBO/VAO 没有解绑或解绑太多次(而且搞砸了),有人可以告诉我如何解绑 VBO 和 VAO 吗? 【参考方案1】:

已解决:多通道渲染已停用,因此场景被多次渲染

【讨论】:

以上是关于paintEvent中的Qt QPainter消除了用paintGL绘制的图形的主要内容,如果未能解决你的问题,请参考以下文章

Qt - 创建 QPainter

Qt 5.10 中的 QPainter::drawImage() 故障

如何使用 Qt QPainter 绘制线性渐变弧?

QT利用Qpainter怎么在多个窗口中画图 一般只能在paintEvent函数中为主窗口绘图 那怎么样在函数中

qt中函数paintEvent(QPaintEvent*)是否被系统自动调用的

Qt paintEvent事件 显示图片文字