2015-03-23 3 views
0

Итак, моя цель - (сначала) нарисовать треугольник с openGL.qt openGL - draw triangle

мои вопросы:

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

Я не вижу класс под названием Widget сделанные вами, которые подключен к классу MyGlWidget. Возможно, я ошибаюсь, но не нужно ли вам создавать экземпляр MyGlWidget (вызывать его конструктор вместо виджета?)

+0

да действительно! Я не делаю никакого экземпляра или чего-то еще, но эти функции вызываются! –

+0

Но разве вы не сказали, что продвинули виджет в «MyGLWidget»? Как ты это сделал? С дизайнером? – Dirk

+0

Да, я сделал это с дизайнером. Я должен признать, что я действительно не знаю, что это способствует ... –

0

Обе функции называются внутри класса суперкласса QGLWidget. См. QT Docs

В документации вы также увидите, что эти виртуальные функции защищены. В вашем коде находятся общественность. Поэтому вы должны изменить это, чтобы заставить его работать.

+0

Я включил обе функции в защищенные. Но вызывается только один, функция инициализации не вызывается. Зачем? –