openGL的图像在Qt的界面中显示
来源:互联网 发布:js弹出输入框 编辑:程序博客网 时间:2024/06/05 19:58
学习编程有一段时间了,今天开始写自己的第一篇博客,以前从没写过,发现程序中遇到的许多问题当时解决后就忘记解决方法了,下次遇到又要百度,太浪费时间了。废话少说,写起:
本代码的平台Qt5.5.1+Vs2013+win7。openGL在Qt的界面中显示是通过QGLWidget累实现的,首先得创建一个父类为QGLWidget的类。initializeGL()完成OpenGL环境的初始化,paintGL()绘制OpenGL图形,resizeGL()在窗口发生改变时运行。以下代码利用此方法,在窗口中显示一个简单的三角形。
新建一个Qt的工程,然后在界面中加入一个widget控件,将其提升为myQtOpenglWindow。其实很简单,但是自己摸索可能有点麻烦。我也是在http://blog.csdn.net/damotiansheng/article/details/42192139的基础上做的。
//myqtopenglwindow.h#ifndef MYQTOPENGLWINDOW_H #define MYQTOPENGLWINDOW_H #include <QtOpenGL/QtOpenGL> #include <QtOpenGL/QGLWidget> #include <QWidget> class myQtOpenglWindow : public QGLWidget{ Q_OBJECTpublic: explicit myQtOpenglWindow(QWidget* parent = 0, const char* name = 0, bool fs = false); \ ~myQtOpenglWindow();protected: void initializeGL(); void paintGL(); void resizeGL(int width, int height); void keyPressEvent(QKeyEvent *);protected: bool fullScreen;signals: public slots :};#endif // MYQTOPENGLWINDOW_H
//myqtopenglwindow.cpp#include "myqtopenglwindow.h" #include <gl/GLU.h> myQtOpenglWindow::myQtOpenglWindow(QWidget* parent, const char* name, bool fs) :QGLWidget(parent){ //保存窗口是否为全屏的状态。 fullScreen = fs; //设置窗口的位置,即左上角为(0,0)点,大小为640*480。 //setGeometry(20,30, 640, 480); // 设置窗口的标题为“My's OpenGL Framework”。 //setCaption( "My's OpenGL Framework" ); // 如果fullscreen为真,那么就全屏显示这个窗口。 if (fullScreen) { showFullScreen(); }}myQtOpenglWindow::~myQtOpenglWindow(){}void myQtOpenglWindow::initializeGL(){ glShadeModel(GL_SMOOTH); glClearColor(0.0, 0.0, 0.0, 0.0); glClearDepth(1.0); glEnable(GL_DEPTH_TEST); glDepthFunc(GL_LEQUAL); glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); return;}void myQtOpenglWindow::paintGL(){ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity(); glTranslatef(-1.5, 0.0, -6.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(); return;}void myQtOpenglWindow::resizeGL(int width, int height){ //防止height为0 if (height == 0) { height = 1; } //重置当前的视口(Viewport) glViewport(0, 0, (GLint)width, (GLint)height); glClearColor(1.0f, 1.0f, 0.5f, 0.0f); //选择投影矩阵。 glMatrixMode(GL_PROJECTION); //重置投影矩阵 glLoadIdentity(); //建立透视投影矩阵 gluPerspective(45.0, (GLfloat)width / (GLfloat)height, 0.1, 100.0); //gluPerspective(45.0,(GLfloat)width() / (GLfloat)height(),0.1,100.0); // 选择模型观察矩阵 glMatrixMode(GL_MODELVIEW); // 重置模型观察矩阵。 glLoadIdentity(); return;}void myQtOpenglWindow::keyPressEvent(QKeyEvent * e){ switch (e->key()) { //如果按下了F2键,那么屏幕是否全屏的状态就切换一次。然后再根据需要,显示所要的全屏窗口或者普通窗口。 case Qt::Key_F2: fullScreen = !fullScreen; if (fullScreen) { showFullScreen(); } else { showNormal(); setGeometry(0, 0, 640, 480); } updateGL(); break; //如果按下了Escape键,程序退出。 case Qt::Key_Escape: close(); } return;}
//qtopenglwindow.h#ifndef QTOPENGLWINDOW_H#define QTOPENGLWINDOW_H#include <QtWidgets/QMainWindow>#include "ui_qtopenglwindow.h"class QtOpenGLWindow : public QMainWindow{ Q_OBJECTpublic: QtOpenGLWindow(QWidget *parent = 0); ~QtOpenGLWindow();private: Ui::QtOpenGLWindowClass ui;};#endif // QTOPENGLWINDOW_H
qtopenglwindow.cpp#include "qtopenglwindow.h"QtOpenGLWindow::QtOpenGLWindow(QWidget *parent) : QMainWindow(parent){ ui.setupUi(this);}QtOpenGLWindow::~QtOpenGLWindow(){}
//main.cpp#include "qtopenglwindow.h"#include <QtWidgets/QApplication>int main(int argc, char *argv[]){ QApplication a(argc, argv); QtOpenGLWindow w; w.show(); return a.exec();}![程序的效果](http://img.blog.csdn.net/20170221205142616?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY2JmXzEwMjI=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
0 0
- openGL的图像在Qt的界面中显示
- [OpenCV Qt教程] 在Qt图形界面中显示OpenCV图像的OpenGL Widget (第一部分)
- [OpenCV Qt教程] 在Qt图形界面中显示OpenCV图像的OpenGL Widget(第二部分)
- 【QT】将OpenGL渲染的图像放置到ui界面中
- OpenGL+Qt界面(二) 创建界面,并增加显示OpenGL的组件
- Qt自定义界面类并提升(提升的窗口部件),把OpenGL绘制的图形显示在QT的ui界面上
- Qt中显示opencv的图像
- QT+VTK: 如何在QT中显示VTK生成的图像
- OpenGL+Qt界面(三) Qt中实现OPENGL的基本交互+代码
- QT,其他类中计算出的结果如何在ui界面的控件中显示?
- 【Qt开发】Qt中图像的显示与基本操作
- 在 OpenGL 的显示窗口中截图
- 在 OpenGL 的显示窗口中截图
- QT在界面中显示动态图片
- 关于fedora9中Qt Creator在界面编辑无法显示菜单栏的问题解决
- Qt 在布局好的界面上显示一个控件
- 关于iMX6Q QT 在UI界面显示中文的问题!
- 如何在QT的label上显示图像
- spring ioc学习
- ORA-00313: drop standby logfile
- CSS布局
- 深入.NET 第五章 体检套餐
- 各种语言中的多态
- openGL的图像在Qt的界面中显示
- POJ 3339 Team Arrangement 可能会
- 解决DTD 和 schema 文件无提示问题
- 三星手机开发游戏工具 成为游戏必备神器
- POJ-Til the Cows Come Home
- 三步教你轻松搭建Android开发环境
- 设计模式(十五):原型模式
- 打印沙漏
- HDU4310_Hero_贪心