我想像this教程中那样制作简单的opengl项目。

我添加了从QGLWidget继承的新类GLWidget,并将我的QWidget对象提升为我已经制作的GLWidget类。当我运行项目时,我无法刷新QWidget对象。每次我在构建和运行项目时看到该窗口后面的内容时。

这就是Correct的样子
这就是它的真正外观not correct


GLWidget.h

#ifndef GLWIDGET_H
#define GLWIDGET_H

#include <GL/glew.h>
#include <QGLWidget>
#include <QTimer>

class GLWidget : public QGLWidget
{
    Q_OBJECT
public:
    explicit GLWidget(QWidget *parent = 0);
    GLWidget(int width, int height);

    void initializeGL();
    void paintGL();
    void resizeGL(int w, int h);

private:
    void timerEvent(QTimerEvent *);
};

#endif // GLWIDGET_H


GlWidget.cpp

#include "glwidget.h"
#include<QMessageBox>
GLWidget::GLWidget(QWidget *parent) :
    QGLWidget(parent)
{
}

void GLWidget::initializeGL()
{
    // Init Glew
    glewExperimental = GL_TRUE;

    GLenum error = glewInit();
    if(error != GLEW_OK)
    {
        exit(1);
    }
    glClearColor( 0.2f, 0.45f, 0.8f, 1.0f ); // blue background
    glClearDepth( 1.0f );
}

GLWidget::GLWidget(int width, int height) : QGLWidget()
{
    startTimer(30);
    resize(width, height);
}

void GLWidget::paintGL()
{
    glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
}

void GLWidget::resizeGL(int width, int height)
{
    glViewport(0, 0, width, height);
}

void GLWidget::timerEvent(QTimerEvent *)
{
    updateGL();
}


主窗口

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private:
    Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H


主窗口cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}




#-------------------------------------------------
#
# Project created by QtCreator 2014-10-16T20:17:33
#
#-------------------------------------------------

QT       += core gui opengl

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = Manipulatorv2
TEMPLATE = app


SOURCES += main.cpp\
        mainwindow.cpp \
    glwidget.cpp

HEADERS  += mainwindow.h \
    glwidget.h

FORMS    += mainwindow.ui

INCLUDEPATH += "/home/szczepan/glew-1.11.0/include"

LIBS += -L"/home/szczepan/glew-1.11.0/lib"-lGLEW

最佳答案

使用GLWidget时,您应覆盖paintGL并使用参数中设置的正确位执行glClearBuffer。否则,它将仅占用当时缓冲区中的任何内容。

10-04 12:25