Информация об изменениях

Сообщение вынести код рисования из QGLWidget::paint() от 28.12.2016 10:16

Изменено 28.12.2016 11:30 gencoder

Помогите вынести код рисования OpenGL-графики из метода paint() класса наследника QGLWidget во внешний функтор:

Собирается, запускается, но не рисуется:
class DrawerFunctor
{
    // QGLWidget * context_ {0};
    public:
        // DrawerFunctor( QGLWidget *context = 0 ):  context_(context) {}
        void operator()()
        {
            glBegin(GL_LINES);
                glVertex3f( 10.0f,  0.0f,  0.0f);
                glVertex3f( -10.0f,  0.0f,  0.0f);
            glEnd();
        }

};

class Scene : public QGLWidget {
Q_OBJECT
    DrawerFunctor *f;
public:
    Scene(QWidget *parent = 0){f = new DrawerFunctor(this);}
    ~Scene(){delete f;}
    void initializeGL(){/*...*/}
    void resizeGL(int w, int h){/*...*/}
    void paintGL(/*...*/  (*f)(); );
};
вынести код рисования из QGLWidget::paint()
Помогите вынести код рисования OpenGL-графики из метода paint() класса наследника QGLWidget во внешний функтор:

Собирается, запускается, но не рисуется:
class DrawerFunctor
{
    // QGLWidget * context_ {0};
    public:
        // DrawerFunctor( QGLWidget *context = 0 ):  context_(context) {}
        void operator()()
        {
            glBegin(GL_LINES);
                glVertex3f( 10.0f,  0.0f,  0.0f);
                glVertex3f( -10.0f,  0.0f,  0.0f);
            glEnd();
        }

};

class Scene : public QGLWidget {
Q_OBJECT
    DrawerFunctor *f;
public:
    Scene(QWidget *parent = 0){f = new DrawerFunctor(this);}
    ~Scene(){delete f;}
    void initializeGL(){/*...*/}
    void resizeGL(int w, int h){/*...*/}
    void paintGL() {/*...*/  (*f)(); }
};