Red de conocimiento informático - Material del sitio web - Cómo construir un nuevo proyecto QT opengl

Cómo construir un nuevo proyecto QT opengl

Mis propias notas al aprender QT, como referencia

Construcción del entorno de desarrollo OPENGL en QT

Primero agregue el archivo de configuración del entorno.pro en el archivo del proyecto

QT = qt3support // Compatible con qt3

QT = opengl // Compatible con la biblioteca OPENGL

archivo nehewidget.h

#include lt qgl.hgt; biblioteca

#include lt; QtGui/qevent.hgt; //biblioteca que se agregará

clase NeHeWidget: public QGLWidget //Cualquier forma OPENGL debe derivarse de la clase QGLWidget

{

Q_OBJECT //Definición de macroSolo con la adición de Q_OBJECT puedes usar los mecanismos de señal y ranura en QT

público:

NeHeWidget( QWidget* padre = 0, const char* nombre = 0, bool fs = false);

~NeHeWidget();

protegido:

vacío inicializeGL(); //inicializa la ventana

void paintGL(); //pinta la ventana

void resizeGL( int width, int height ); >

void keyPressEvent( QKeyEvent *e); //evento de botón

protegido:

bool pantalla completa; //evento de pantalla completa

}; p>

Archivo fuente

NeHeWidget::NeHeWidget(QWidget* padre, const char* nombre, bool fs)

:QGLWidget(padre, nombre) //dos parámetros del constructor necesario para QGLWidget

{

pantalla completa = fs;

setGeometry(0, 0, 640, 480);

setCaption ( " NeHe's OpenGL Framework" );

if ( pantalla completa )

showFullScreen(); //establecer global

}

NeHeWidget :: ~NeHeWidget()

{

}

void NeHeWidget::initializeGL()

{

glShadeModel ( GL_SMO

OTH );

glClearColor( 0.0, 0.0, 0.0, 0.0 );

glClearDepth(

glEnable( GL_DEPTH_TEST ); p> 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 ancho , int altura )

{

if ( altura == 0 )

{

altura = 1;

}

glViewport( 0, 0, (GLint)ancho, (GLint)alto

glMatrixMode( GL_PROJECTION

glLoadIdentity();

gluPerspective( 45.0, (GLfloat)ancho/(GLfloat)alto, 0.1, 100.0);

glMatrixMode( GL_MODELVIEW

glLoadIdentity(); /p>

}

void NeHeWidget::keyPressEvent( QKeyEvent *e)

{

cambiar ( e-gt; key() )

{

caso Qt::Key_F2:

pantalla completa = ! pantalla completa

si (pantalla completa)

{

showFullScreen()

}

más p>

{

showNormal();

setGeometry( 0, 0, 640, 480);

}

<); p> actualizarGL();

romper

caso Qt: :Key_Escape:

cerrar()

}

}

main.cpp

#include lt;qapplication.hgt;

#include lt;qmessagebox.hgt;

#include "nehewidget.h"

int main( int argc, char **argv)

{

bool fs = false;

QApplication a(argc, argv);

switch( QMessageBox::

información( 0,

"¿Iniciar pantalla completa?",

"¿Le gustaría ejecutar en modo de pantalla completa?",

QMessageBox::Sí,

p>

QMessageBox::No | QMessageBox::Default ) )

{

Ejemplo QMessageBox::Sí:

fs = verdadero;

p>

descanso;

caso QMessageBox: :No:

fs = falso

descanso;

}

NeHeWidget w( 0, 0, fs

a.setMainWidget( amp; w ); show();

return a.exec();

}

// Cuando utilice OPENGL para dibujar en QT, recuerde utilizar UPDATE() para actualizar los datos

.