如何建立新的QT+opengl工程
1个回答
展开全部
我自己学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(),更新数据
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(),更新数据
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
科博尔
2024-10-31 广告
2024-10-31 广告
QT400-18是一种球墨铸铁材料,QT代表“球铁”,400表示其抗拉强度为400MPa,18则表示延伸率为18%。该材料属于铁素体型球墨铸铁,具有良好的韧性和塑性,能够承受高冲击振动及扭转等动、静载荷,特别在低温工作条件下具有较好的冲击性...
点击进入详情页
本回答由科博尔提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询