qt openGL - 绘制三角形

时间:2015-03-23 07:10:19

标签: c++ qt user-interface opengl

所以我的目标是(首先)用openGL绘制一个三角形。

我的问题:

1)我的两个函数如何/何时被调用?我看到只有一个被召唤。即void MyGLWidget :: paintGL。我很困惑,因为你可以看到我从不调用这个函数,它会被自动调用。我在我的ui上添加了一个小部件,我将其提升为MyGLWidget。但是什么时候/为什么/如何得到(不)被称为?

我的代码: myglwidget.cpp

#include "myglwidget.h"
#include <QtWidgets>
#include <QtOpenGL>
#include <GL/glu.h>


MyGLWidget::MyGLWidget(QWidget *parent)
    : QGLWidget(QGLFormat(QGL::SampleBuffers), parent)
{
}

void MyGLWidget::initializeGL()
{
    glClearColor(1,1,0,1);
    qDebug("init"); //<-------never gets printed
}

void MyGLWidget::paintGL()
{
    glClear(GL_COLOR_BUFFER_BIT);
    qDebug("painting"); //<---- does get printed
    glColor3f(1,0,0);
    glBegin(GL_TRIANGLES);
        glVertex3f(-0.5,-0.5,0);
        glVertex3f(0.5,-0.5,0);
        glVertex3f(0.0,0.5,0);
    glEnd();
}

myglwidget.h

#ifndef MYGLWIDGET_H
#define MYGLWIDGET_H
#include <QGLWidget>

class MyGLWidget : public QGLWidget
{
    Q_OBJECT
public:
   explicit MyGLWidget(QWidget *parent = 0);

   void initializeGL();
   void paintGL();
   void resizeGL(int width, int height);
private:

};

#endif // MYGLWIDGET_H

的main.cpp

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.setWindowTitle("OpenGL with Qt DAO");
    w.show();

    return a.exec();
}

2 个答案:

答案 0 :(得分:0)

我没有看到一个名为Widget的类,它连接到类MyGlWidget。也许我错了,但你不应该制作MyGlWidget的实例(称之为构造函数而不是Widget?)

答案 1 :(得分:0)

这两个函数都由QGLWidget超类内部调用。见QT Docs

在文档中,您还会看到这些虚拟功能受保护。在您的代码中,他们公开。因此,您必须对其进行更改才能使其正常工作。