QT与OpenGL之绘图
2012-12-05 16:07
155 查看
在之前说道过VS2010中配合OpenGL绘图的问题,这回是想要说说在QT中使用OpenGL,其实两者并无太大区别,因为都是基于C++语言的。
主要是想简要介绍下OpenGL在QT中的使用方法跟一些错误。
glwidget.h //继承自QGLWidget,用来实现OpenGL相关的操作以及绘图操作
glwidget.cpp //glwidget.h的源文件
main.cpp //原始cpp文件,未改变
说明:
(1) 绘图工作:
void GLWidget::paintGL()
这个是主要的绘图函数,整个的绘图工作都在这个里面。
(2) 坐标点:
OpenGL的坐标点的范围-1到1。
(3) 如何在OpenGL图形周围写字:
renderText(20,100,"Hello
Jcy,
Myfirst
OpenGL
app.");
第一个跟第二个参数是坐标位置,第三个是需要显示的字。
可能出现的错误:
(1)错误:C1083: Cannot open include file: 'QtOpenGL': No such file or directory
如果你是这个错误,那么你需要在.pro文件中添加QT += opengl
(2)错误:C2504: 'QGLWidget' : base class undefined
如果你是这个错误,那么请你在.h文件中添加 #include<QtOpenGL>
(3)错误:C2039: 'show' : is not a member of 'GLWidget'
如果你是这个错误,那么请你在.h文件中添加 #include <QtOpenGL>
上面的代码参考了Qt_OpenGL教程
主要是想简要介绍下OpenGL在QT中的使用方法跟一些错误。
glwidget.h //继承自QGLWidget,用来实现OpenGL相关的操作以及绘图操作
#ifndef GLWIDGET_H #define GLWIDGET_H #include <QtOpenGL> #include <QWidget> namespace Ui { class GLWidget; } class GLWidget : public QGLWidget { Q_OBJECT public: explicit GLWidget(QGLWidget *parent = 0); ~GLWidget(); protected: void initializeGL(); //初始化OpenGL窗口部件 void paintGL(); //绘制整个OpenGL窗口,只要有更新发生,这个函数就会被调用 void resizeGL(int width, int height); //处理窗口大小变化事件的,参数是新状态下的宽和高 void keyPressEvent(QKeyEvent *e); //鼠标处理函数 protected: bool fullscreen; //判断是否全屏的变量 private: Ui::GLWidget *ui; }; #endif // GLWIDGET_H
glwidget.cpp //glwidget.h的源文件
#include "glwidget.h" #include "ui_glwidget.h" #include <QtGui> #include <QtCore> #include <QtOpenGL> GLWidget::GLWidget(QGLWidget *parent) : QGLWidget(parent), ui(new Ui::GLWidget) { ui->setupUi(this); fullscreen = false; } //这是对虚函数,这里是重写该函数 void GLWidget::initializeGL() { setGeometry(300, 200, 640, 480);//设置窗口初始位置和大小 glShadeModel(GL_FLAT);//设置阴影平滑模式 glClearColor(0.0, 0.0, 0.0, 0);//改变窗口的背景颜色 glClearDepth(1.0);//设置深度缓存 glEnable(GL_DEPTH_TEST);//允许深度测试 glDepthFunc(GL_LEQUAL);//设置深度测试类型 glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);//进行透视校正 } void GLWidget::paintGL() { glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); glLoadIdentity(); //renderText(10,20,"Hello,My Dear"); // glColor3f(1.0, 0.0, 0.0); /* glBegin(GL_TRIANGLES); glVertex3f(0.0, 1.0, 0.0); glVertex3f(-1.0, -1.0, 0.0); glVertex3f(1.0, -1.0, 0.0); glEnd(); */ glBegin(GL_TRIANGLES); glColor3f(1.0f, 0.0f, 0.0f); glVertex3f(0.0f, 1.0f, 0.0f); glColor3f(0.0f, 1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 0.0f); glColor3f(0.0f, 0.0f, 1.0f); glVertex3f(1.0f, -1.0f, 0.0f); glEnd(); renderText(20, 100, "Hello Jcy, My first OpenGL app."); } //该程序是设置opengl场景透视图,程序中至少被执行一次(程序启动时). void GLWidget::resizeGL(int width, int height) { if(0 == height) height = 1;//防止一条边为0 glViewport(0, 0, (GLint)width, (GLint)height);//重置当前视口,本身不是重置窗口的,只不过是这里被Qt给封装好了 glMatrixMode(GL_PROJECTION);//选择投影矩阵 glLoadIdentity();//重置选择好的投影矩阵 // gluPerspective(45.0, (GLfloat)width/(GLfloat)height, 0.1, 100.0);//建立透视投影矩阵 // glMatirxMode(GL_MODELVIEW);//以下2句和上面出现的解释一样 glLoadIdentity(); } void GLWidget::keyPressEvent(QKeyEvent *e) { switch(e->key()) { //F1键为全屏和普通屏显示切换键 case Qt::Key_F1: fullscreen = !fullscreen; if(fullscreen) showFullScreen(); else { setGeometry(300, 150, 640, 480); showNormal(); } updateGL(); break; //Ese为退出程序键 case Qt::Key_Escape: close(); } } GLWidget::~GLWidget() { delete ui; }
main.cpp //原始cpp文件,未改变
#include <QtGui/QApplication> #include "glwidget.h" int main(int argc, char *argv[]) { QApplication a(argc, argv); GLWidget w; w.show(); return a.exec(); }
说明:
(1) 绘图工作:
void GLWidget::paintGL()
这个是主要的绘图函数,整个的绘图工作都在这个里面。
(2) 坐标点:
OpenGL的坐标点的范围-1到1。
(3) 如何在OpenGL图形周围写字:
renderText(20,100,"Hello
Jcy,
Myfirst
OpenGL
app.");
第一个跟第二个参数是坐标位置,第三个是需要显示的字。
可能出现的错误:
(1)错误:C1083: Cannot open include file: 'QtOpenGL': No such file or directory
如果你是这个错误,那么你需要在.pro文件中添加QT += opengl
(2)错误:C2504: 'QGLWidget' : base class undefined
如果你是这个错误,那么请你在.h文件中添加 #include<QtOpenGL>
(3)错误:C2039: 'show' : is not a member of 'GLWidget'
如果你是这个错误,那么请你在.h文件中添加 #include <QtOpenGL>
上面的代码参考了Qt_OpenGL教程
相关文章推荐
- 三维绘图之OpenGL和Qt的结合
- 实现图形Qt学习:三维绘图之OpenGL和Qt的结合
- Qt5.9.4中利用QOpenGLWidget类进行opengl绘图
- QT使用GDI和OpenGL绘图,相比QPainter绘图降低CPU占用率
- 【Qt OpenGL】Qt Creator中的3D绘图及动画教程
- 三维绘图之OpenGL和Qt的结合
- 【Qt OpenGL】Qt Creator中的3D绘图及动画教程
- 在QT和SDL搭建的框架中使用OPENGL在SDL窗口上进行绘图
- Qt OpenGL三维绘图
- ubuntu+QT+ OpenGL绘图
- Qt学习:三维绘图之OpenGL和Qt的结合
- 模仿QtOpenGL例子VowelCube时遇到的三维和Qt绘图引擎QPainter混合问题
- [OpenCV Qt教程] 在Qt图形界面中显示OpenCV图像的OpenGL Widget (第一部分)
- 从OpenGL传颜色数值到Shader,改变绘图颜色
- 吃饭睡觉学QT(11)- QT窗口绘图
- Qt+OpenGL实现正方体旋转平移放大缩小,以及六个面贴不同图片
- Qt下的OpenGL 编程(1)Qt下的OpenGL编程必须步骤
- Qt下的OpenGL 编程(2)动手搭建Qt下的OpenGL编程框架
- qt超强绘图控件qwt - 安装及配置
- Qt下的OpenGL 编程(4)进军3D世界