// glwindow.hpp
#ifndef _OPENGL_WINDOW_
#define _OPENGL_WINDOW_
#include <QGLWidget>
class GLWindow : public QGLWidget
{
Q_OBJECT;
public:
GLWindow(QWidget *parent = 0) : QGLWidget(parent)
{ }
protected:
void initializeGL();
void resizeGL(int, int);
void paintGL();
};
#endif
// glwindow.cpp
#include "glwindow.hpp"
#include <cstdlib>
void GLWindow::initializeGL()
{
float r = std::rand() / (RAND_MAX + 1.0f);
float g = std::rand() / (RAND_MAX + 1.0f);
float b = std::rand() / (RAND_MAX + 1.0f);
glClearColor(r, g, b, 0.0);
}
void GLWindow::resizeGL(int w, int h)
{
glViewport(0, 0, (GLint)w, (GLint)h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-100.0, 100.0, -100.0, 100.0, -1.0, 1.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
void GLWindow::paintGL()
{
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0, 0.0, 0.0);
glRectf(-10.0, 10.0, -10.0, 10.0);
glFlush();
}
// main.cpp
#include <QtGui>
#include <cstdlib>
#include <ctime>
#include "glwindow.hpp"
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
GLWindow *win = new GLWindow();
GLWindow *child = new GLWindow(win);
std::srand(std::time(0));
child->resize(100, 100);
win->resize(400,400);
win->show();
child->show();
app.exec();
delete win;
// no need to delete child because QGLWidget destructor of _win_ is already do it.
return 0;
}