在Qt5.4的Example中,有一个例子qopenglwidget,介绍了QOpenGLWidget和QPainter,但是在使用过程中,需要注意哪些方面呢?我在最初使用的时候就遇到两者不能同时使用的问题,经过一番折腾,终于解决了该问题。下面,我将需要注意的点记录下来,以便查询。

第一种方法,也就是直接QOpenGLWidget的paintGL函数中绘制两者,其步骤为:

void GLWidget::paintGL() {

QPainter painter;
painter.begin(this);
painter.beginNativePainting();

//绘制3D内容

......

//注意:1、一定要释放QOpenGLVertexArrayObject、QOpenGLBuffer、QOpenGLShaderProgram、QOpenGLTexture等;2、如果开启深度测试,一定要关闭。例如:

m_program->release();
m_vao.release();
m_logoVbo.release();
glDisable(GL_DEPTH_TEST);
glDisable(GL_CULL_FACE);

painter.endNativePainting();

//绘制2D内容

......

painter.end();

第二种方法,是在网上找的,其贴子地址http://blog.csdn.net/sdaujiaojiao/article/details/41898207,该贴主应该无法使用第一种方法,所以,另辟蹊径。现将方法也列出来,便于杳找,如若想详细了解,请到上面的网址。其步骤为:首先,重载两个函数paintGL、paintEvent;然后,就是实现,但是这种方法需要释放QOpenGLVertexArrayObject、QOpenGLBuffer、QOpenGLShaderProgram、QOpenGLTexture等,也不需要关闭深度测试。

void GLWidget::paintGL()
{

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

......

void GLWidget::paintEvent(QPaintEvent *e)

makeCurrent();
paintGL();
QPainter pter(this);
pter.setPen(Qt::blue);
pter.drawText(20,50,"This is a Text!");
pter.end();
update();

在第二种方法中,paintGL和paintEvent的调用是一一对应的;起初,我还以为paintGL每次更新,会被调用两次,经过测试,其只被paintEvent函数调用一次。

两种方法都有其优点,在根据需要选择;第二种方法,比较适合扩展,无需改动原因的代码,只需要重载paintEvent,并在函数中调用paintGL,并绘制2D内容即可。

在Qt5.4的Example中,有一个例子qopenglwidget,介绍了QOpenGLWidget和QPainter,但是在使用过程中,需要注意哪些方面呢?我在最初使用的时候就遇到两者不能同时使用的问题,经过一番折腾,终于解决了该问题。下面,我将需要注意的点记录下来,以便查询。第一种方法,也就是直接QOpenGLWidget的paintGL函数中绘制两者,其步骤为:QPainter p Q OpenGL Widget 类是用于渲染 OpenGL 图形。 除了可以选择使用 QPainter 和标准的 OpenGL 渲染图形,Q OpenGL Widget 类提供了在Qt应用程序 显示 OpenGL 图形的功能。它使用起来非常简单:新建类继承于Q OpenGL Widget ,使用方法就像继承于Q Widget 类子类一样。 Q OpenGL Wid... Q OpenGL Widget 类是一个用于渲染 OpenGL 图形的小部件。 Q OpenGL Widget 提供了显示集成到 Qt 应用程序 OpenGL 图形的功能。它使用起来非常简单:自定义类继承它并像其他 Q Widget 子类一样使用,还可以选择使用 QPainter 和标准 OpenGL 渲染命令。 Q OpenGL Widget 提供了三个方便的虚函数,可以在子类 重新 实现 这些虚函数来执行典型的 OpenGL 任务: paintGL():渲染 OpenGL 场景,每当需要更新小部件时 1.Q OpenGL Widget 的早先版本 QGL Widget 是遗留Qt OpenGL 模块的一部分,和其他QGL类一样,应该在新的应用程序 避免使用。相反,从Qt 5.4开始,最好使用Q OpenGL Widget 和Q OpenGL 类。 如果开发XP平台,由于兼容性问题, Qt5 .4(不含)之后的Qt Opengl Widget 则不兼容,建议还是用QGL Widget . 2.Q OpenGL Widget 类是用于呈现 OpenGL 图形的部件 Q OpenGL Wi...
框架: OpenGL 3.3、Qt 5.12.3MinGW(3.2以前是传统模式(固定管线模式-已被丢弃),3.3是现在模式(可 编程 管线)) 优势:安装简单,Qt已经封装好了,如GLFW和GLAD。自己有支持 OpenGL 的窗口。 介绍: OpenGL 是Open Graphics Library的缩写,它是由Khronos组织制定并维护的一个规范。 OpenGL 的核心库是用C语言编写,但同时也支持多种语言的派生。 核心模式:3.3以后版本新推出的模式,也叫现在模式或可 编程 模式。 GPU渲染是一个流水线:比如输入一大
在 Qt ,可以使用 QPainter 类来绘制 QToolButton 的图片和文字。 首先,需要创建一个 QToolButton 对象并设置好要显示的图片和文字。然后,使用 QPainter 类的构造函数创建一个 QPainter 对象,并将 QToolButton 作为参数传入。接下来,可以使用 QPainter 类的 drawText() 和 drawImage() 函数分别绘制文字和图片。最后,调用 QPainter 类的 end() 函数结束绘制操作。 下面是一个简单的例子,展示了如何使用 QPainter 绘制 QToolButton 的图片和文字: QToolButton* button = new QToolButton; button->setText("按钮"); button->setIcon(QIcon("button.png")); QPainter painter(button); painter.drawText(button->rect(), Qt::AlignCenter, button->text()); painter.drawImage(button->rect(), QImage("button.png")); painter.end(); 希望这能帮到你! ubuntu 14.04 64bit Qt5.4.2 Android error:Android build platform: android--1 sharewitheveryone: 其实,安装Qt5.6就没有类似的情况了,如果发生这样的事情,可以考虑升级版本.