如何建立新的QT+opengl工程

 我来答
l109383670
推荐于2016-01-14 · TA获得超过419个赞
知道小有建树答主
回答量:222
采纳率:100%
帮助的人:216万
展开全部
我自己学QT时的笔记,供参考

QT下构建OPENGL开发环境

首先在工程文件下加入环境配置 .pro
QT += qt3support //支持qt3支持
QT += opengl //OPENGL库支持

nehewidget.h文件

#include <qgl.h> //要加入的库
#include <QtGui/qevent.h> //要加入的库

class NeHeWidget : public QGLWidget //任何OPENGL的窗体都要从QGLWidget类中派生

{
Q_OBJECT //宏定义只有加入了Q_OBJECT,你才能使用QT中的signal和slot机制

public:
NeHeWidget( QWidget* parent = 0, const char* name = 0, bool fs = false );
~NeHeWidget();
protected:
void initializeGL(); //初始化窗口
void paintGL(); //画窗口
void resizeGL( int width, int height ); //重置窗口
void keyPressEvent( QKeyEvent *e ); //按钮事件
protected:
bool fullscreen; //全屏事件
};

源文件
NeHeWidget::NeHeWidget( QWidget* parent, const char* name, bool fs )
: QGLWidget( parent, name ) //二个QGLWidget 需要的构造参数
{
fullscreen = fs;
setGeometry( 0, 0, 640, 480 ); //设置大小
setCaption( "NeHe's OpenGL Framework" );
if ( fullscreen )
showFullScreen(); //设置全局
}
NeHeWidget::~NeHeWidget()
{
}
void NeHeWidget::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 );
}
void NeHeWidget::paintGL()
{
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
glLoadIdentity();
}
void NeHeWidget::resizeGL( int width, int height )
{
if ( height == 0 )
{
height = 1;
}
glViewport( 0, 0, (GLint)width, (GLint)height );
glMatrixMode( GL_PROJECTION );
glLoadIdentity();
gluPerspective( 45.0, (GLfloat)width/(GLfloat)height, 0.1, 100.0 );
glMatrixMode( GL_MODELVIEW );
glLoadIdentity();
}
void NeHeWidget::keyPressEvent( QKeyEvent *e )
{
switch ( e->key() )
{
case Qt::Key_F2:
fullscreen = !fullscreen;
if ( fullscreen )
{
showFullScreen();
}
else
{
showNormal();
setGeometry( 0, 0, 640, 480 );
}
updateGL();
break;
case Qt::Key_Escape:
close();
}
}

main.cpp
#include <qapplication.h>
#include <qmessagebox.h>
#include "nehewidget.h"
int main( int argc, char **argv )
{
bool fs = false;
QApplication a(argc,argv);
switch( QMessageBox::information( 0,
"Start FullScreen?",
"Would You Like To Run In Fullscreen Mode?",
QMessageBox::Yes,
QMessageBox::No | QMessageBox::Default ) )
{
case QMessageBox::Yes:
fs = true;
break;
case QMessageBox::No:
fs = false;
break;
}
NeHeWidget w( 0, 0, fs );
a.setMainWidget( &w );
w.show();
return a.exec();
}

//QT中用OPENGL画图时,记得用UPDATE(),更新数据
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
浙江启扬智能科技有限公司
2023-08-23 广告
作为浙江启扬智能科技有限公司的工作人员,我可以为您解答有关ARM开发板的问题。ARM开发板是一种基于ARM架构的微型计算机板,可用于开发嵌入式系统、智能控制、数据采集、多媒体处理等应用。常见的ARM开发板包括Cortex-A、Cortex-... 点击进入详情页
本回答由浙江启扬智能科技有限公司提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式