在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: