所以我的目标是(首先)用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();
}
答案 0 :(得分:0)
我没有看到一个名为Widget的类,它连接到类MyGlWidget。也许我错了,但你不应该制作MyGlWidget的实例(称之为构造函数而不是Widget?)
答案 1 :(得分:0)
这两个函数都由QGLWidget超类内部调用。见QT Docs
在文档中,您还会看到这些虚拟功能受保护。在您的代码中,他们公开。因此,您必须对其进行更改才能使其正常工作。